一个反斜杠转化成两个反斜杠 将“/” 转化成“//”

来源:互联网 发布:网站商城网络整合营销 编辑:程序博客网 时间:2024/06/05 11:46

今天做一个从服务器批量下载的功能遇到一个小问题。

将一个反斜杠转化成两个反斜杠

 

      

很有意思的东东。我刚开始直接用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个/来说,最终会被解释成“//”。

 

以上这段话比较难理解。要多读几遍才明白。