Belki diğer yaklaşımlar kadar zarif değil ama oldukça sağlam ve takip etmesi kolay, özellikle. Java'ya yeni başlayanlar için. String sınıfıyla ilgili beni anlayan bir şey şudur: Çok uzun zamandır etrafta dolaşıyor ve regexp ile genel bir değiştirmeyi ve Strings ile (CharSequences aracılığıyla) genel bir değiştirmeyi desteklerken, sonuncusu basit bir boole parametresine sahip değildir. : 'isCaseInsensitive'. Gerçekten, sadece o küçük anahtarı ekleyerek, yokluğunun özellikle yeni başlayanlar için neden olduğu tüm sorunların önlenebileceğini düşünmüştünüz. Şimdi JDK 7'de, String hala bu küçük eklemeyi desteklemiyor!
Neyse, kavraymayı bırakacağım. Özellikle Java'da daha yeni olan herkes için, işte sizin kesme ve yapıştırma deus ex machina . Dediğim gibi, bu kadar zarif değil ve size herhangi bir kaygan kodlama ödülü kazandırmayacak, ancak işe yarıyor ve güvenilir. Herhangi bir yorum, katkıda bulunmaktan çekinmeyin. (Evet, biliyorum, StringBuffer muhtemelen iki karakter dizisi mutasyon satırını yönetmek için daha iyi bir seçimdir, ancak teknikleri değiştirmek yeterince kolaydır.)
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;
}