1.请分析这下面这两个输出吧,最好一个一个斜杠地分析。
System.out.println("8abc8".replaceAll("8", "\\\\"));            //  \8abc\
System.out.println("8abc8".replaceAll("8", "\\\\\\\\"));        //  \\8abc\\2.为什么A和B可以有相同的输出,C和D却不可以呢?
System.out.println("8abc8".replaceAll("8", "*"));               //A    *abc*
System.out.println("8abc8".replaceAll("8", "\\*"));             //B    *abc*System.out.println("8abc8".replaceAll("8", "\\"));               //C   错误,无法输出。
System.out.println("8abc8".replaceAll("8", "\\\\"));             //D    \abc\
 

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【dabins】截止到2008-07-05 08:58:11的历史汇总数据(不包括此帖):
    发帖的总数量:23                       发帖的总分数:440                      
    结贴的总数量:8                        结贴的总分数:140                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:15                       未结的总分数:300                      
    结贴的百分比:34.78 %               结分的百分比:31.82 %                  
    无满意结贴率:12.50 %               无满意结分率:14.29 %                  
    楼主该结一些帖子了
      

  2.   

    1.replaceAll时 \\\\->\\    println时\\->\
    2.replaceAll时 \\* ->\*    println时 \*->*
      C: replaceAll时 \\ -> \  println输出 \8...不合法的转义
      

  3.   

    最后一句写错了。。C: replaceAll时 \\ -> \  println输出 \abc\...不合法的转义
      

  4.   

    "\\\\" 字符串转义-> \\ 正则转义-> \
      

  5.   

     replaceAll(String regex, String replacement);
    第二个参数不是正则表达式啊?为什么要再转义?
    如果这么说的话,想打印一个反斜杠出来,是不是要写成
    System.out.println("\\\\"); 
      

  6.   

    呵呵,确实不属于正则,可以理解为转义表达式
    多看api手册java.util.regex.MatcherappendReplacement
    替换字符串可能包含到以前匹配期间所捕获的子序列的引用:$g 每次出现时,都将被 group(g) 的计算结果替换。$ 之后的第一个数始终被视为组引用的一部分。如果后续的数可以形成合法组引用,则将被合并到 g 中。只有数字 '0' 到 '9' 被视为组引用的可能组件。例如,如果第二个组匹配字符串 "foo",则传递替换字符串 "$2bar" 将导致 "foobar" 被添加到字符串缓冲区。可能将美元符号 ($) 作为替换字符串中的字面值(通过前面使用一个反斜线 (\$))包括进来。 注意,在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作为字面值替换字符串时所产生的结果不同。美元符号可视为到如上所述已捕获子序列的引用,反斜线可用于转义替换字符串中的字面值字符。replaceAll
    替换字符串可能包含到已捕获子序列的引用,如在 appendReplacement 方法中一样。