Vielleicht nicht so elegant wie andere Ansätze, aber es ist ziemlich solide und leicht zu befolgen, insb. für Leute, die neu in Java sind. Eine Sache, die mich an der String-Klasse interessiert, ist folgende: Es gibt sie schon sehr lange und obwohl sie ein globales Ersetzen durch regulären Ausdruck und ein globales Ersetzen durch Strings (über CharSequences) unterstützt, hat das letzte keinen einfachen booleschen Parameter : 'isCaseInsensitive'. Wirklich, Sie hätten gedacht, dass durch das Hinzufügen dieses einen kleinen Schalters all die Probleme, die seine Abwesenheit insbesondere für Anfänger verursacht, hätten vermieden werden können. Jetzt auf JDK 7 unterstützt String diese eine kleine Ergänzung immer noch nicht!
Na ja, ich werde aufhören zu greifen. Für alle, die besonders neu in Java sind, ist hier Ihr Deus ex machina zum Ausschneiden und Einfügen . Wie gesagt, nicht so elegant und bringt Ihnen keine tollen Codierungspreise ein, aber es funktioniert und ist zuverlässig. Bei Kommentaren können Sie gerne einen Beitrag leisten. (Ja, ich weiß, StringBuffer ist wahrscheinlich die bessere Wahl für die Verwaltung der Mutationslinien mit zwei Zeichenfolgen, aber es ist einfach genug, die Techniken auszutauschen.)
public String replaceAll(String findtxt, String replacetxt, String str,
boolean isCaseInsensitive) {
if (str == null) {
return null;
}
if (findtxt == null || findtxt.length() == 0) {
return str;
}
if (findtxt.length() > str.length()) {
return str;
}
int counter = 0;
String thesubstr = "";
while ((counter < str.length())
&& (str.substring(counter).length() >= findtxt.length())) {
thesubstr = str.substring(counter, counter + findtxt.length());
if (isCaseInsensitive) {
if (thesubstr.equalsIgnoreCase(findtxt)) {
str = str.substring(0, counter) + replacetxt
+ str.substring(counter + findtxt.length());
// Failing to increment counter by replacetxt.length() leaves you open
// to an infinite-replacement loop scenario: Go to replace "a" with "aa" but
// increment counter by only 1 and you'll be replacing 'a's forever.
counter += replacetxt.length();
} else {
counter++; // No match so move on to the next character from
// which to check for a findtxt string match.
}
} else {
if (thesubstr.equals(findtxt)) {
str = str.substring(0, counter) + replacetxt
+ str.substring(counter + findtxt.length());
counter += replacetxt.length();
} else {
counter++;
}
}
}
return str;
}