【发布时间】:2010-11-30 17:42:49
【问题描述】:
我想替换字符串中子字符串的所有实例,但String.replaceAll() 只接受一个模式。我来自上一场比赛的字符串。是否可以向我拥有的模式添加转义,或者在另一个接受文字字符串而不是模式的类中是否有 replaceAll() 的版本?
【问题讨论】:
标签: java
我想替换字符串中子字符串的所有实例,但String.replaceAll() 只接受一个模式。我来自上一场比赛的字符串。是否可以向我拥有的模式添加转义,或者在另一个接受文字字符串而不是模式的类中是否有 replaceAll() 的版本?
【问题讨论】:
标签: java
只需使用String.replace(CharSequence,CharSequence) 而不是replaceAll。
注意:replace 不只是替换第一次出现,它会替换所有次出现,例如 replaceAll。
【讨论】:
System.out.println("hello world, hello life, hello you".replace("hello","hi")); 返回"hi world, hi life, hi you"。
replaceAll(正则表达式方法)的命名是为了区别于replaceFirst(正则表达式方法),而不是与replace(非正则表达式方法)区别开来。
添加转义的方法是Pattern.quote()。
String replaced = myString.replaceAll(Pattern.quote(matchingStr), replacementStr)
但正如 Jon 所说,您可以使用 replace()。尽管它偏离了 replaceAll 名称,但它确实替换了 所有 项,就像 replaceAll() 一样。
【讨论】:
Pattern.compile() 将字符串编译为正则表达式,这意味着特殊字符将被赋予特殊含义。这与 Pattern.quote() 所做的完全相反,以及 OP 的要求(quote() 说,“将字符串视为文字”)。也许您可以扩展您所说的“不良结果”。
Matcher.quoteReplacement("$aa +")。 Pattern.compile() 产生 Pattern,而不是 String,所以我不清楚你是如何在 replaceAll 中使用它的。