API中String类的replaceAll方法如下:public String replaceAll(String regex, String replacement)
参数:
regex - 用来匹配此字符串的正则表达式
replacement - 用来替换每个匹配项的字符串
例子: System.out.println("a.b".replaceAll("\\.", "*")); //A a*b
System.out.println("a.b".replaceAll("\\.", "\\*")); //B a*b问1:(我知道第一个参数是正则表达式)为何A句和B句的输出一样? replaceAll()的第二个参数replacement不是正则表达式,为何却使用了正则的写法,而且输出竟然不是\*而是* ?问2: 如果说一个非正则表达式的字符串也支持正则表达式的写法那么以下这两句话的输出结果为何不一样。
System.out.println("*"); // *
System.out.println("\\*"); // \*
参数:
regex - 用来匹配此字符串的正则表达式
replacement - 用来替换每个匹配项的字符串
例子: System.out.println("a.b".replaceAll("\\.", "*")); //A a*b
System.out.println("a.b".replaceAll("\\.", "\\*")); //B a*b问1:(我知道第一个参数是正则表达式)为何A句和B句的输出一样? replaceAll()的第二个参数replacement不是正则表达式,为何却使用了正则的写法,而且输出竟然不是\*而是* ?问2: 如果说一个非正则表达式的字符串也支持正则表达式的写法那么以下这两句话的输出结果为何不一样。
System.out.println("*"); // *
System.out.println("\\*"); // \*
楼主【dabins】截止到2008-07-07 14:37:47的历史汇总数据(不包括此帖):
发帖的总数量:24 发帖的总分数:330
结贴的总数量:21 结贴的总分数:270
无满意结贴数:6 无满意结贴分:150
未结的帖子数:3 未结的总分数:60
结贴的百分比:87.50 % 结分的百分比:81.82 %
无满意结贴率:28.57 % 无满意结分率:55.56 %
楼主加油
public String replaceAll(String regex,
String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同: Pattern.compile(regex).matcher(str).replaceAll(repl)
注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。
所以尽量不要使用\和$就是了,内部处理可能比较特殊,你可以看以下java.util.regex.Matcher中replaceAll() 方法的实现.
System.out.println("a.b".replaceAll("\\.", Matcher.quoteReplacement("\\*")));
System.out.println("a.b".replaceAll("\\.", "\\*")); //B a*b
为什么2个结果一样,
因为A的情况×在正则表达式中没有特殊含义,所以他的replacement就直接是×了
而B的情况,java自己会解析"\\*"为"\*",然后正则表达式对于"\*"他又会解析一次,解析为×所以为什么2个都是×的原因了!