叶明的javablog

java学习天堂,个人关于其他blog:blog.javaworker.cn,欢迎大家访问
posts - 64, comments - 50, trackbacks - 0, articles - 3

今天在解析html时间,在调用页面页面中替换链接时间发生没有错误,程序执行的该步骤,但是就是没有将我要求替换的内容给替换掉。

这个是需要替换的内容<a href=../../08/19/10483.html>下一篇: PHP+MySQL应用中使用XOR运算加密算法</a>

不知道是什么原因,replassall竟然不能替换,是找不到源里的数据,还是其他有问题呢?其他页面都能替换掉,就是有1-2个页面不能替换,郁闷。是不是字符编码的问题?有谁知道吗?请赐教


我使用indexof("")时间发现里边确实存在。该内容,,我需要替换的字符就是‘<a href=../../08/19/10483.html>下一篇: PHP+MySQL应用中使用XOR运算加密算法</a>’,难道是‘../’的问题

以前使用split拆分的时间发现‘.’有时间是失灵的,这个应该是关键标示的原因,但是这个replaceall竟然也不能,其他链接和该链接是一致的,替换的只是名称和地址,其他都是一样的

Feedback

# re: 郁闷的问题。关于String中replaceAll方法   回复  更多评论   

2007-09-15 09:09 by BeanSoft
replaceAll 参数是正则表达式, 不是普通的字符串. 看看有没有不符合要求的字符串.

# re: 郁闷的问题。关于String中replaceAll方法   回复  更多评论   

2007-09-15 09:22 by 千里冰封
楼上说的有道理,特别是.它在正则表达式里面有特殊的含 义

# re: 郁闷的问题。关于String中replaceAll方法   回复  更多评论   

2007-09-15 09:31 by lovajava_ye
实际上要求替换的字符就是‘<a href=../../08/19/10483.html>下一篇: PHP+MySQL应用中使用XOR运算加密算法</a>’这个字符串,我看了,doc上说‘\’和‘$’符号这个要注册,我这个里边没有这些字符啊

# re: 郁闷的问题。关于String中replaceAll方法   回复  更多评论   

2007-09-15 09:55 by BeanSoft
最好还是用我们自己实现的替换字符串的方法来做(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 DoubleHeart
'.'这个也是正则里的特殊符号呀
你最好去用Apache的Commons下的StringUtils.replace()。
而不是用一些效率很低、实现也比较丑陋的私有实现方式。

# re: 郁闷的问题。关于String中replaceAll方法   回复  更多评论   

2007-09-15 22:05 by BeanSoft
找找资料把 '.' 转义了就好.

只有注册用户登录后才能发表评论。


网站导航: