String testStr = "\test";
System.out.println(testStr.replaceAll("\\", "_"));我想把\test替换成_test,但是按上面的写法运行会报错
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at lmiky.test.string.SubStringTest.main(SubStringTest.java:101)

解决方案 »

  1.   

    楼上正解 
    字符串里 \\表示一个"\" 但relaceAll里的 第一个参数是一个正则表达式
    在正则里 \\\\表示一个"\" 至今我都不明白为什么要这样 呵呵
      

  2.   


    一个是正则表达式的转义,一个是java语法的转义,双层转义。
      

  3.   

    \t 是转义字符吧  你的写法就是错的  要写成str="\\test"
      

  4.   

    普通情况下 是replaceAll("\\\\", "_")的
    不过你测试用test  \t 又代表退表符,这就不是斜杠的替换了replaceAll("\t", "_t")
      

  5.   

    我得到的串的值就是这样的,比如 d:\test\test.wav,有什么办法能替换
      

  6.   

    或者写成       String testStr = "\\test";
         System.out.println(testStr.replaceAll("\\\\", "_"));
      

  7.   

    不一定就是\t,还有别的,比如
    e:\record_bak_dir\20110502\09673\2011050200425509673O07712118668.wav
      

  8.   

    汗,我没测试过,想当然了。\t你写的不对,要\\tString testStr = "\\test";
    System.out.println(testStr.replaceAll("\\\\", "_"));
      

  9.   

    那这样你考虑的就多了 \n \r \t \e 这一类的都是转义字符 按String 截取的时候还要照顾各种情况。
      

  10.   

    String testStr = "\test";
    这个文本内容不是 \test....
    内容是[    est]
    自己打印一下看就知道了System.out.println("\test");文本内容\test的写法是 String testStr = "\\test";
    相应的替换是testStr.replace("\\\\","_");windows的路径写法本来就不能再java下直接用...没人和你说过斜杠要写正斜杠或者双斜杠吗...
    你这个路径是因为正好这个字符串里没碰到转移字符而已...
      

  11.   

    这样可以把"\"替换成"_t" String str="d:\\test\\test.wav";
    String temp=str.replaceAll("\\\\", "_t");
    System.out.println(temp);
      

  12.   


    这样会好多啊,还包括一些数字,比如
    System.out.println("\201");
    打印的结果是: ?
      

  13.   

    你这个问题以前做过,就用replace就成
    你这么写一下
    temp = str.replace("")
    然后打印temp的值
    以前我我做过一个是获取网址,然后再根据网址生成目录,文件,写到tomcat的运行目录中,像你这样的问题就这样就行
      

  14.   

    需求是这样的,有些url有特殊字符,而这些特殊字符在windows的文件名里是不能拥有的,所以要把这样特殊字符都替换成别的字符
    比如3g.qq.com:80\forward.jsp,本地的文件名就是3g.qq.com:80_forward.jsp
      

  15.   


    public class M
    {
    public static void main(String[] args) 
    {
    String str = "\\test";
    System.out.println(str);
    System.out.println(str.replaceAll("\\\\","_"));
    }
    };
      

  16.   

    测试用例写错了,应该是
    "\\test"
      

  17.   

    刚才试了下,你这么整一下,先把获取到的字符串由单\替换为双\\,然后再用
    System.out.println(testStr.replaceAll("\\\\", "_"));
      

  18.   

    你去查一查API帮助文档,好像有方法可以解决这个问题~
      

  19.   

    受不鸟了...
    你没说清楚啊...
    是别人给你的字符串吧?
    传给你的字符串是\test
    那你获得的字符串存储实际为 \\test
      

  20.   

    自己用String的charAt转换下不知道可以不可以
      

  21.   

    replaceAll("\t", "_t")可以
    不过估计其它的要你自己全部换了
      

  22.   

    我自己需求没说清楚,我重新发了个贴
    http://topic.csdn.net/u/20111213/09/faacf560-582d-4918-9c8f-fa2ab59b64d9.html?62675