A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 起个好名字 中级黑马   /  2015-3-4 16:34  /  887 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我想把输入的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("\\","/");

求解
我只要\转换成/而已

评分

参与人数 1黑马币 +20 收起 理由
好你把个子 + 20 赞一个!

查看全部评分

5 个回复

倒序浏览
str=str.replaceAll("\\","/");
改成
str=str.replaceAll("\\\\","/");
回复 使用道具 举报
好你把个子 发表于 2015-3-4 16:43
str=str.replaceAll("\\","/");
改成
str=str.replaceAll("\\\\","/");

谢谢我试试
回复 使用道具 举报
2楼正解。原因:
这 里的关键是String.replaceAll()是用regular expression 来作为参数的。但是java本身的字符串对于转义符/也有类似的处理。首先,java编译器会把“//”解释成一个字符串(只有一个字符)——“/”
接下来,由于replaceAll是以正则表达式作为参数,所以“/”对于正则表达式来说'/'代表转义字符 而它后面没有东西所以会抛出异常。所以调用replaceAll()函数时需要注意将“/“ 表达成“////”。

点评

学习了  发表于 2015-3-4 23:37

评分

参与人数 1黑马币 +2 收起 理由
万合天宜 + 2 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 z47057554 于 2015-3-4 19:57 编辑


按下面就可以了


    1. String str="C:\\Documents and Settings\\Henry\\桌面\\1\\linecounter";
    2.                 str=str.replace('\\','/'); //\t, \r, \n都是一个字符,\\也只表示一个字符

    3.                 System.out.println(str);
    复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马