不带RegEx的String.replaceAll


115

我想替换字符串中子字符串的所有实例,但String.replaceAll()仅接受模式。我来自先前比赛的字符串。是否可以在我拥有的模式中添加转义replaceAll()符,或者在另一个类中是否存在版本,而该类接受文字字符串而不是模式?


Answers:


189

只是使用String.replace(CharSequence,CharSequence)而不是replaceAll


13
这不只是取代第一个吗?他们称其为“ replaceAll”而不是“ replaceRegex”很奇怪。
魔术章鱼缸

6
System.out.println("hello world, hello life, hello you".replace("hello","hi"));返回"hi world, hi life, hi you"
Thiago Mata '18

14
@MagicOctopusUrn:是的,我同意这是非常糟糕的命名-随着时间的推移,这引起了很多混乱。
乔恩·斯基特

方法的命名很糟糕。为什么他们(sun / oracle)使简单的事情变得复杂
Stunner

93

添加转义的方法是Pattern.quote()

String replaced = myString.replaceAll(Pattern.quote(matchingStr), replacementStr)

但是正如乔恩所说,你可以用replace()。尽管事实与replaceAll名称有所不同,但它确实取代了所有出现的内容,就像一样replaceAll()


例如,如果您的matchingStr中有“ $”,则效果很好。
朱利安·拉丰

而是Pattern.compile(); Pattern.quote()带来了不良结果
Pavlo Zvarych

@PavloZvarych:Pattern.compile()将字符串编译为正则表达式,意味着特殊字符将具有特殊含义。这与Pattern.quote()操作以及OP要求的完全相反(例如quote(),“将字符串作为文字处理”)。也许您可以扩展您正在谈论的“不良结果”。
Mark Peters

@MarkPeters这就像\\ G1 \\ G代表“ $ 1”
Pavlo Zvarych

1
@PavloZvarych:如果您想引用替换项(而不是搜索模式),则要使用Matcher.quoteReplacement("$aa +")Pattern.compile()产生一个Pattern,而不是a String,因此我不清楚您在中如何使用它replaceAll
Mark Peters
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.