您的位置:首页 > 编程语言 > Java开发

关于java中replace,replaceFirst,replaceAll的一个问题

2011-05-09 14:12 411 查看



在项目中遇到过这么一个问题,一段字符替换的代码:

/**

* 字符串替换

*/

public static String replaceDoc(String doc, String repDoc)

{

return doc.replaceAll
(repDoc, "");

}

/**

* 测试1

*/

public static void main(String[] args) {

String a = "a.doc,b.doc,a.doc,";

String b = "a.doc";

System.out.println(replaceDoc(a, b));

}

结果:"b.doc,"运行正常

但在投入试运行后,发现这个方法不能正常运行,用户传入参数( a = "a.doc[1],b.doc,a[1].doc,",b = "a[1].doc";)

/**

* 测试2

*/

public static void main(String[] args) {

String a = "a.doc[1],b.doc,a[1].doc,";

String b = "a[1].doc";

System.out.println(replaceDoc(a, b));

}

结果:"a.doc[1],b.doc,a[1].doc,"

参考了下api,发现

replaceAll(String regex, String replacement)

使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式
的每个子字符串。

replaceFirst(String regex, String replacement)

使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式
的第一个子字符串。

而“[”、“]”在正则表达式中为

特殊字符
,被保留作特殊用途。


这样,虽然你传递了字符串编译就会没有问题,但是你传的不是正则表达式,到了java虚拟机中之后,

java不认识你传递的表达式,也就不会去替换任何东西,所以执行结果也只能是"a.doc[1],b.doc,a[1].doc,"。

后来我用replace替换了

replaceAll
,问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: