以下代码使用Java replace()中的String类的方法.
String a = "abc/xyz";
System.out.println(a.replace("/", "\\"));
Run Code Online (Sandbox Code Playgroud)
/在给定的String a中被替换为\.
如果我们使用replaceAll()如下方法,同样的事情是错误的.
System.out.println(a.replaceAll("/", "\\"));
Run Code Online (Sandbox Code Playgroud)
它会导致java.lang.StringIndexOutOfBoundsException抛出异常.它需要两个额外的反斜杠\,如下所示,因为replaceAll()使用正则表达式,而不是replace()方法的情况.
System.out.println(a.replaceAll("/", "\\\\"));
Run Code Online (Sandbox Code Playgroud)
唯一的问题是为什么这个方法只使用两个斜线就像这样a.replaceAll("/", "\\")抛出java.lang.StringIndexOutOfBoundsException?
split()另一方面,该方法最初发布了一个waring 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.
Run Code Online (Sandbox Code Playgroud)
尝试运行此操作会导致java.util.regex.PatternSyntaxException抛出异常.
由于它使用正则表达式replaceAll(),它需要四个反斜杠.
System.out.println(b.split("\\\\")[0]+b.split("\\\\")[1]);
Run Code Online (Sandbox Code Playgroud)
为什么a.replaceAll("/", "\\\\");在前面的情况下不会发出这样的警告或这样的运行时异常,即使它有一个无效的模式?