黑马程序员技术交流社区

标题: 帮我看看这个问题 [打印本页]

作者: 起个好名字    时间: 2015-3-4 16:34
标题: 帮我看看这个问题
我想把输入的C:\Documents and Settings\Henry\桌面\1\linecounter转换成允许格式,再交给File f=new File(str)处理

str=str.replaceAll("\\","/");

编译通过,运行错误

C:\Documents and Settings\Henry\桌面\1\linecounter

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected in
ternal 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 FilterFile.main(FilterFile.java:26)

26行就是上面的str=str.replaceAll("\\","/");

求解
我只要\转换成/而已
作者: 好你把个子    时间: 2015-3-4 16:43
str=str.replaceAll("\\","/");
改成
str=str.replaceAll("\\\\","/");

作者: 起个好名字    时间: 2015-3-4 17:07
好你把个子 发表于 2015-3-4 16:43
str=str.replaceAll("\\","/");
改成
str=str.replaceAll("\\\\","/");

谢谢我试试
作者: 路文龙    时间: 2015-3-4 18:46
2楼正解。原因:
这 里的关键是String.replaceAll()是用regular expression 来作为参数的。但是java本身的字符串对于转义符/也有类似的处理。首先,java编译器会把“//”解释成一个字符串(只有一个字符)——“/”
接下来,由于replaceAll是以正则表达式作为参数,所以“/”对于正则表达式来说'/'代表转义字符 而它后面没有东西所以会抛出异常。所以调用replaceAll()函数时需要注意将“/“ 表达成“////”。
作者: z47057554    时间: 2015-3-4 19:44
本帖最后由 z47057554 于 2015-3-4 19:57 编辑


按下面就可以了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2