Tidak seanggun pendekatan lain tetapi cukup solid dan mudah diikuti, esp. untuk orang yang lebih baru ke Jawa. Satu hal yang membuat saya tentang kelas String adalah ini: Ini sudah ada untuk waktu yang sangat lama dan sementara itu mendukung penggantian global dengan regexp dan ganti global dengan Strings (via CharSequences), yang terakhir tidak memiliki parameter boolean sederhana : 'isCaseInsensitive'. Sungguh, Anda akan berpikir bahwa hanya dengan menambahkan satu tombol kecil, semua masalah yang disebabkan ketidakhadirannya untuk pemula terutama bisa dihindari. Sekarang di JDK 7, String masih tidak mendukung penambahan kecil ini!
Baiklah, saya akan berhenti mencengkeram. Untuk semua orang khususnya yang lebih baru ke Jawa, inilah de- ex machina cut-and-paste Anda . Seperti yang saya katakan, tidak elegan dan tidak akan memenangkan hadiah kodekan yang licin, tetapi berhasil dan dapat diandalkan. Setiap komentar, silakan berkontribusi. (Ya, saya tahu, StringBuffer mungkin merupakan pilihan yang lebih baik untuk mengelola dua garis mutasi karakter string, tetapi cukup mudah untuk menukar teknik.)
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;
}