首先尝试了如下代码

String dir = System.getProperty("user.dir"); System.out.println(dir); dir = dir.replaceAll("//", "/"); System.out.println(dir);

系统提示“无效的正则表达式:Unexpected internal error”

正确的应该是:

String dir = System.getProperty("user.dir"); System.out.println(dir); dir = dir.replaceAll("////", "/"); System.out.println(dir);

为什么呢?replaceAll函数:public ​​String​replaceAll (​​String​​ regex,​ ​String​​ replacement)等价于​ ​Pattern​ ​.​ ​compile​ ​ ( regex ).​​matcher​ ​ ( str ).​​replaceAll​ ​ ( repl ) 。而在Java里面"//"代表"/",所以“//”替换为正则表达式就是“////”了。同样对于“$”符号也是,在Java里面表示为"/$",因此正则表达式为“//$”了。

 

当然如果你只是想避免"/"带来的问题,可以直接使用java.util.regex.Matcher.quoteReplacement(string)将“/”替换成“//”。