아마도 다른 접근 방식만큼 우아하지는 않지만 매우 견고하고 따르기 쉽습니다. Java를 처음 사용하는 사람들을 위해. String 클래스에 대해 한 가지 사실은 다음과 같습니다. 매우 오랫동안 주변에 있었고 regexp로 전역 대체와 String으로 전역 대체를 지원하는 동안 (CharSequences를 통해) 마지막으로 간단한 부울 매개 변수가 없습니다. : '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;
}