【发布时间】:2012-10-08 02:54:24
【问题描述】:
以下代码使用Java中String类的replace()方法。
String a = "abc/xyz";
System.out.println(a.replace("/", "\\"));
给定字符串a 中的/ 将替换为\。
同样的事情是错误的,如果我们使用replaceAll()方法如下。
System.out.println(a.replaceAll("/", "\\"));
它会导致抛出异常java.lang.StringIndexOutOfBoundsException。它需要两个额外的反斜杠\,如下所示,因为replaceAll() 使用了一个正则表达式,而replace() 方法不是这样。
System.out.println(a.replaceAll("/", "\\\\"));
唯一的问题是为什么这种方法在只使用两个斜杠时会像这样a.replaceAll("/", "\\") 抛出java.lang.StringIndexOutOfBoundsException?
另一方面,split() 方法最初会发出警告 Invalid regular expression: Unexpected internal error(我使用的是 NetBeans 6.9.1)。
String b="abc\\xyz";
System.out.println(b.split("\\")[0]+b.split("\\")[1]); //Issues a warning as specified.
尝试运行它会导致抛出异常java.util.regex.PatternSyntaxException。
由于它使用像replaceAll() 这样的正则表达式,因此需要四个反斜杠。
System.out.println(b.split("\\\\")[0]+b.split("\\\\")[1]);
为什么a.replaceAll("/", "\\\\"); 在前面的例子中没有发出这样的警告或这样的运行时异常,即使它有一个无效的模式?
【问题讨论】:
-
你为什么要这样做?如果这是一个文件名,请保留它,它将按原样工作。
标签: java regex string replace replaceall