3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
也許不如其他方法那么優(yōu)雅,但是它非常扎實(shí)且易于遵循,尤其是。對(duì)于剛接觸Java的人。讓我了解String類的一件事是:它已經(jīng)存在很長(zhǎng)時(shí)間了,雖然它支持使用regexp進(jìn)行全局替換和使用Strings(通過(guò)CharSequences)進(jìn)行全局替換,但最后一個(gè)沒(méi)有簡(jiǎn)單的布爾參數(shù):'isCaseInsensitive'。確實(shí),您曾想過(guò),只需添加一個(gè)小開關(guān),就可以避免它的缺失給初學(xué)者帶來(lái)的所有麻煩?,F(xiàn)在在JDK 7上,String 仍然不支持這一功能!
好吧,反正我會(huì)停止抓緊。對(duì)于特別喜歡Java的每個(gè)人,這里都是您可以剪切并粘貼的deus ex machina。就像我說(shuō)的那樣,它不那么優(yōu)雅,不會(huì)贏得任何出色的編碼獎(jiǎng),但是它有效并且可靠。任何意見(jiàn),請(qǐng)隨時(shí)貢獻(xiàn)。(是的,我知道,StringBuffer可能是管理兩個(gè)字符串突變行的更好選擇,但交換技術(shù)很容易。)
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;
}
添加回答
舉報(bào)