[Java] in string array alle ij vervangen door y

Pagina: 1
Acties:
  • 148 views sinds 30-01-2008

  • Tycho2
  • Registratie: Januari 2002
  • Niet online
Ik heb een array gevuld met strings waarvan ik alle "ij" wil vervangen door "y".
ik heb gezocht in de api maar het enige begrijpelijke wat ik kan vinden is bv.
array[i].replace('a','b') die dan alle a-tjes in b-tjes veranderd.
Bestaat er ook zo iets waar je twee characters tegelijkertijd kan veranderen ?
Of hoe kan ik dit het beste doen ?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik denk dat je een vrij oude Java 2 SDK hebt. Vanaf versie 1.4.0 is er namelijk een String.replaceAll methode die je kan gebruik voor wat jij wilt.

Kijk echter wel uit: deze methode implementeert geen simpele replace, maar gebruikt reguliere expressies. Je 'oude string' wordt dus behandeld als een reguliere expressie. Op zich allemaal prachtig, je moet alleen even in de gaten houden. Ook moet je dit niet gaan gebruiken als er super performance nodig is: daarvoor kan je beter een gewone replace methode gebruiken.

Een tijd geleden hebben we ons op GoT een keer uitgeleefd en een nachtje wat varianten van zo'n implementatie bekeken. Hier kan je het resultaat vandaan plukken als je performance nodig hebt:

[rml][ JAVA] string replacen[/rml]

Dit was een van de snelste:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public class ReplaceTest
{
    public static void main(String[] ps)
    {
        String text1 = "dit is een<I><U><B><I></i></b></u></i></i> markup</u>";
        StringBuffer text2 = new StringBufer(text1);
        String[] markuplist ={"<B>","</b>","<U>","</u>","<I>","</i>"};

      for(int i=0;i< markuplist.length; i++)
      {
         replaceUltraSnel(text2,markuplist[i],"");
           System.out.println("Na " + markuplist[i] + ", resultaat = " + text2.toString());
      }
    }


      public static String replaceUltraSnel(String source, String firstString, String newString)
    {
        return replaceUltraSnel(new StringBuffer(source), firstString, newString).toString();
    }

    public static StringBuffer replaceUltraSnel(StringBuffer source,  String firstString, String newString)
    {
        final int firstStringLength = firstString.length();
        final int newStringLength = newString.length();
        final char[] firstChars = firstString.toCharArray();
        final char[] newChars = newString.toCharArray();

        if(firstString.length() == newString.length())
        {
            int max = source.length() - firstStringLength;
            boolean equals = false;

            for(int i=0; i < max; i++)
            {
                equals = true;

                for(int j=0;j < firstStringLength; j++)
                {
                    if(source.charAt(i + j) != firstChars[j])
                    {
                        equals = false;
                        break;
                    }
                }

                if(equals)
                {
                    for(int j=0;j < firstStringLength; j++)
                    {
                        source.setCharAt(i + j, newChars[j]);
                    }
                    i += firstStringLength - 1;
                }
            }
        }
        else
        {
            int max = source.length() - firstString.length() + 1;
            int dif = newString.length() - firstStringLength;
            boolean equals = false;

            for(int i=0; i < max; i++)
            {
                equals = true;
                for(int j=0;j < firstStringLength; j++)
                {
                    if(source.charAt(i + j) != firstChars[j])
                    {
                        equals = false;
                        break;
                    }
                }

                if(equals)
                {
                    source.replace(i, i + firstStringLength, newString);
                    i = i + newStringLength - 1;
                    max = max + dif;
                }
            }
        }

        return source;
    }
}

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • silentsnow
  • Registratie: Maart 2001
  • Laatst online: 15-04-2013

silentsnow

« '-_-' »

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public class ReplaceTest
{
    public static void main(String[] ps)
    {
        String text1 = "dit is een<I><U><B><I></i></b></u></i></i> markup</u>";
        StringBuffer text2 = new StringBufer(text1);
        String[] markuplist ={"<B>","</b>","<U>","</u>","<I>","</i>"};

      for(int i=0;i< markuplist.length; i++)
      {
         replaceUltraSnel(text2,markuplist[i],"");
           System.out.println("Na " + markuplist[i] + ", resultaat = " + text2.toString());
      }
    }


      public static String replaceUltraSnel(String source, String firstString, String newString)
    {
        return replaceUltraSnel(new StringBuffer(source), firstString, newString).toString();
    }

    public static StringBuffer replaceUltraSnel(StringBuffer source,  String firstString, String newString)
    {
        final int firstStringLength = firstString.length();
        final int newStringLength = newString.length();
        final char[] firstChars = firstString.toCharArray();
        final char[] newChars = newString.toCharArray();

        if(firstString.length() == newString.length())
        {
            int max = source.length() - firstStringLength;
            boolean equals = false;

            for(int i=0; i < max; i++)
            {
                equals = true;

                for(int j=0;j < firstStringLength; j++)
                {
                    if(source.charAt(i + j) != firstChars[j])
                    {
                        equals = false;
                        break;
                    }
                }

                if(equals)
                {
                    for(int j=0;j < firstStringLength; j++)
                    {
                        source.setCharAt(i + j, newChars[j]);
                    }
                    i += firstStringLength - 1;
                }
            }
        }
        else
        {
            int max = source.length() - firstString.length() + 1;
            int dif = newString.length() - firstStringLength;
            boolean equals = false;

            for(int i=0; i < max; i++)
            {
                equals = true;
                for(int j=0;j < firstStringLength; j++)
                {
                    if(source.charAt(i + j) != firstChars[j])
                    {
                        equals = false;
                        break;
                    }
                }

                if(equals)
                {
                    source.replace(i, i + firstStringLength, newString);
                    i = i + newStringLength - 1;
                    max = max + dif;
                }
            }
        }

        return source;
    }
}


Je kan gewoon de [ c o d e =...] ... [ / c o d e ] tags gebruiken.

The trade of the tools
[ me | specs ] Klipsch Promedia Ultra 5.1 + Sennheiser HD-590


  • Tycho2
  • Registratie: Januari 2002
  • Niet online
Helemaal fantastisch !!
had die replaceAll gezien maar volgde er geen snars van maar hiermee moet ik er zeker uitkomen.
Vreemd alleen dat ik dit topic niet bij de search tegen ben gekomen.
beide enorm bedankt _/-\o_

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
silentsnow schreef op 30 september 2002 @ 03:59:
Je kan gewoon de [ c o d e =...] ... [ / c o d e ] tags gebruiken.
Dat heeft ie ook, alleen geen [ code=java ] maar wat maakt dat nou uit?

Verwijderd

Tycho2 schreef op 30 september 2002 @ 03:45:
Ik heb een array gevuld met strings waarvan ik alle "ij" wil vervangen door "y".
[...]
[melig]
whY?
[/melig]

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

silentsnow schreef op 30 september 2002 @ 03:59:

Je kan gewoon de [ c o d e =...] ... [ / c o d e ] tags gebruiken.
geef mij maar de [ c o d e ] zonder = erbij want die regelnummering is brak.

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • Reefer
  • Registratie: Mei 2000
  • Laatst online: 21-02-2025

Reefer

madness

TheOneLLama schreef op 30 september 2002 @ 12:38:
[...]

geef mij maar de [ c o d e ] zonder = erbij want die regelnummering is brak.
zonder die = erbij loopt de java code in Opera buiten de tabel en buiten beeld aan de rechterkant door..dat is ook wel brak..

A Breakbeat A Day Keeps Religion Away.


  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

Reefer schreef op 30 september 2002 @ 13:04:
[...]
zonder die = erbij loopt de java code in Opera buiten de tabel en buiten beeld aan de rechterkant door..dat is ook wel brak..
Hm dat klopt ja..
Geef mij maar andere forumsoftware >:)

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


Verwijderd

Ik heb een foutje gevonden in deze replace:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class StringUtils {
 public static StringBuffer replace(StringBuffer source, String firstString,String newString) {
        final int firstStringLength = firstString.length();
        final int newStringLength = newString.length();
        final char[] firstChars = firstString.toCharArray();
        final char[] newChars = newString.toCharArray();

        if(firstString.length() == newString.length())
        {
            int max = source.length() - firstStringLength;
            boolean equals = false;

            for(int i=0; i < max; i++)
            {
                equals = true;

                for(int j=0;j < firstStringLength; j++)
                {
                    if(source.charAt(i + j) != firstChars[j])
                    {
                        equals = false;
                        break;
                    }
                }

                if(equals)
                {
                    for(int j=0;j < firstStringLength; j++)
                    {
                        source.setCharAt(i + j, newChars[j]);
                    }
                    i += firstStringLength - 1;
                }
            }
        }
        else
        {
            int max = source.length() - firstString.length() + 1;
            int dif = newString.length() - firstStringLength;
            boolean equals = false;

            for(int i=0; i < max; i++)
            {
                equals = true;
                for(int j=0;j < firstStringLength; j++)
                {
                    if(source.charAt(i + j) != firstChars[j])
                    {
                        equals = false;
                        break;
                    }
                }

                if(equals)
                {
                    source.replace(i, i + firstStringLength, newString);
                    i = i + newStringLength - 1;
                    max = max + dif;
                }
            }
        }

        return source;
    }
}

Test code:
Java:
1
assertEquals("Service type", StringUtils.replace(new StringBuffer("[tableLabel]"), "[tableLabel]", "Service type").toString()); 


De replacement wordt nu in het geheel niet uitgevoerd. Ik heb me er niet genoeg in het algoritme verdiept om de fout op te kunnen sporen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:58
Tja, beetje onnuttig om zo'n oud topic te kicken.

En als je het foutje wilt oplossen: dan zal je je er toch ff moeten in verdiepen en debuggen. Het is niet de bedoeling dat anderen het hier voor jou gaan oplossen.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.