以下代码使用Javareplace()中类的方法。String
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抛出异常。
由于它使用 regex 之类的正则表达式replaceAll(),因此需要四个反斜杠。
System.out.println(b.split("\\\\")[0]+b.split("\\\\")[1]);
为什么a.replaceAll("/", "\\\\");在前面的例子中没有发出这样的警告或这样的运行时异常,即使它有一个无效的模式?