今天做一个从服务器批量下载的功能遇到一个小问题。
将一个反斜杠转化成两个反斜杠
很有意思的东东。我刚开始直接用replace("/","//"),发现不行。
然后用replace("//",""),发现还是报错
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
/
^
at java.util.regex.Pattern.error(Pattern.java:1650)
at java.util.regex.Pattern.compile(Pattern.java:1403)
at java.util.regex.Pattern.<init>(Pattern.java:1124)
at java.util.regex.Pattern.compile(Pattern.java:817)
at java.lang.String.replaceAll(String.java:2000)
at com.FileDemo.main(FileDemo.java:34)
大意是说正则表达式解析错误。
原理不知道,我百度了下发现有如下解释:
String.replaceAll ()是用regular expression 来作为参数的。但是java本身的字符串对于转义符/也有类似的处理。首先,java会把“”解释成一个字符串(其中包含两个char)——“//”这个就是你在JDK的文档里看到的。
接下来,由于replaceAll 是以正则表达式作为参数,所以“//”被解释成一个regex。对于一个regex来说这就代表着一个字符,就是“/”。对后面的那个8个/来说,最终会被解释成“//”。
以上这段话比较难理解。要多读几遍才明白。