回 帖 发 新 帖 刷新版面

主题:[原创][求助] replaceAll疑问

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("\\*");  //  \*

回复列表 (共1个回复)

沙发

System.out.println("a.b".replaceAll("\\.", "\\\\*"));
输出a\*b
API里说:
注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。
遇到基础的API问题请先查API文档。

我来回复

您尚未登录,请登录后再回复。点此登录或注册