Возможно, не так элегантно, как другие подходы, но довольно солидно и легко следовать, особенно. для людей новичков в Java. Одна вещь, которая привлекает меня к классу String, такова: он существует очень давно, и хотя он поддерживает глобальную замену с помощью регулярного выражения и глобальную замену на строки (через CharSequence), последний не имеет простого логического параметра. : isCaseInsensitive. В самом деле, вы бы подумали, что, просто добавив этот маленький переключатель, можно избежать всех проблем, связанных с его отсутствием, особенно для начинающих. Теперь в JDK 7 String все еще не поддерживает это маленькое дополнение!
Ну, в любом случае, я перестану хватать. Для всех, кто новичок в Java, особенно здесь, вы можете вырезать и вставить deus ex machina . Как я уже сказал, не так элегантно и не выиграет ни одного изящных призов за кодирование, но это работает и надежно. Любые комментарии, не стесняйтесь вносить. (Да, я знаю, StringBuffer, вероятно, является лучшим выбором для управления двумя строками мутации строки символов, но это достаточно просто, чтобы поменять местами методы.)
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;
}