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\
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\
楼主【dabins】截止到2008-07-05 08:58:11的历史汇总数据(不包括此帖):
发帖的总数量:23 发帖的总分数:440
结贴的总数量:8 结贴的总分数:140
无满意结贴数:1 无满意结贴分:20
未结的帖子数:15 未结的总分数:300
结贴的百分比:34.78 % 结分的百分比:31.82 %
无满意结贴率:12.50 % 无满意结分率:14.29 %
楼主该结一些帖子了
2.replaceAll时 \\* ->\* println时 \*->*
C: replaceAll时 \\ -> \ println输出 \8...不合法的转义
第二个参数不是正则表达式啊?为什么要再转义?
如果这么说的话,想打印一个反斜杠出来,是不是要写成
System.out.println("\\\\");
多看api手册java.util.regex.MatcherappendReplacement
替换字符串可能包含到以前匹配期间所捕获的子序列的引用:$g 每次出现时,都将被 group(g) 的计算结果替换。$ 之后的第一个数始终被视为组引用的一部分。如果后续的数可以形成合法组引用,则将被合并到 g 中。只有数字 '0' 到 '9' 被视为组引用的可能组件。例如,如果第二个组匹配字符串 "foo",则传递替换字符串 "$2bar" 将导致 "foobar" 被添加到字符串缓冲区。可能将美元符号 ($) 作为替换字符串中的字面值(通过前面使用一个反斜线 (\$))包括进来。 注意,在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作为字面值替换字符串时所产生的结果不同。美元符号可视为到如上所述已捕获子序列的引用,反斜线可用于转义替换字符串中的字面值字符。replaceAll
替换字符串可能包含到已捕获子序列的引用,如在 appendReplacement 方法中一样。