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;
}
} |