# re: 郁悶的問題。關于String中replaceAll方法 回復 更多評論
2007-09-15 09:09 by
replaceAll 參數是正則表達式, 不是普通的字符串. 看看有沒有不符合要求的字符串.
# re: 郁悶的問題。關于String中replaceAll方法 回復 更多評論
2007-09-15 09:22 by
樓上說的有道理,特別是.它在正則表達式里面有特殊的含 義
# re: 郁悶的問題。關于String中replaceAll方法 回復 更多評論
2007-09-15 09:31 by
實際上要求替換的字符就是‘<a href=../../08/19/10483.html>下一篇: PHP+MySQL應用中使用XOR運算加密算法</a>’這個字符串,我看了,doc上說‘\’和‘$’符號這個要注冊,我這個里邊沒有這些字符啊
# re: 郁悶的問題。關于String中replaceAll方法 回復 更多評論
2007-09-15 09:55 by
最好還是用我們自己實現的替換字符串的方法來做(JDK 1.4 之前找的代碼):
// ------------------------------------ 字符串處理方法
// ----------------------------------------------
/**
* 將字符串 source 中的 oldStr 替換為 newStr, 并以大小寫敏感方式進行查找
*
* @param source
* 需要替換的源字符串
* @param oldStr
* 需要被替換的老字符串
* @param newStr
* 替換為的新字符串
*/
public static String replace(String source, String oldStr, String newStr) {
return replace(source, oldStr, newStr, true);
}
/**
* 將字符串 source 中的 oldStr 替換為 newStr, matchCase 為是否設置大小寫敏感查找
*
* @param source
* 需要替換的源字符串
* @param oldStr
* 需要被替換的老字符串
* @param newStr
* 替換為的新字符串
* @param matchCase
* 是否需要按照大小寫敏感方式查找
*/
public static String replace(String source, String oldStr, String newStr,
boolean matchCase) {
if (source == null) {
return null;
}
// 首先檢查舊字符串是否存在, 不存在就不進行替換
if (source.toLowerCase().indexOf(oldStr.toLowerCase()) == -1) {
return source;
}
int findStartPos = 0;
int a = 0;
while (a > -1) {
int b = 0;
String str1, str2, str3, str4, strA, strB;
str1 = source;
str2 = str1.toLowerCase();
str3 = oldStr;
str4 = str3.toLowerCase();
if (matchCase) {
strA = str1;
strB = str3;
} else {
strA = str2;
strB = str4;
}
a = strA.indexOf(strB, findStartPos);
if (a > -1) {
b = oldStr.length();
findStartPos = a + b;
StringBuffer bbuf = new StringBuffer(source);
source = bbuf.replace(a, a + b, newStr) + "";
// 新的查找開始點位于替換后的字符串的結尾
findStartPos = findStartPos + newStr.length() - b;
}
}
return source;
}
# re: 郁悶的問題。關于String中replaceAll方法 回復 更多評論
2007-09-15 21:25 by
'.'這個也是正則里的特殊符號呀
你最好去用Apache的Commons下的StringUtils.replace()。
而不是用一些效率很低、實現也比較丑陋的私有實現方式。