Tal vez no sea tan elegante como otros enfoques, pero es bastante sólido y fácil de seguir, especialmente. para personas más nuevas en Java. Una cosa que me sorprende de la clase String es esta: ha existido durante mucho tiempo y, aunque admite un reemplazo global con regexp y un reemplazo global con Strings (a través de CharSequences), este último no tiene un parámetro booleano simple : 'isCaseInsensitive'. Realmente, habrías pensado que con solo agregar ese pequeño interruptor, todos los problemas que su ausencia causa especialmente para los principiantes podrían haberse evitado. Ahora en JDK 7, String still no admite esta pequeña adición!
Bueno, de todos modos, dejaré de agarrarme. Para todos los más nuevos en Java, aquí está su deus ex machina de cortar y pegar . Como dije, no es tan elegante y no te dará ningún premio de codificación, pero funciona y es confiable. Cualquier comentario, no dude en contribuir. (Sí, lo sé, StringBuffer es probablemente una mejor opción para administrar las líneas de mutación de cadena de dos caracteres, pero es bastante fácil intercambiar las técnicas).
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;
}