RegExなしのString.replaceAll


115

文字列内の部分文字列のすべてのインスタンスを置き換えたいのですがString.replaceAll()、パターンしか受け入れません。私が以前の試合から来た文字列。私が持っているパターンにエスケープを追加することは可能replaceAll()ですか、またはパターンの代わりにリテラル文字列を受け入れる別のクラスのバージョンがありますか?


回答:


189

だけではString.replace(CharSequence,CharSequence)なく使用してくださいreplaceAll


13
これは最初のものを置き換えるだけではありませんか?奇妙なことに、「replaceRegex」ではなく「replaceAll」と呼んでいました。
マジックタコの壷2018年

6
System.out.println("hello world, hello life, hello you".replace("hello","hi"));を返します"hi world, hi life, hi you"
チアゴ・マタ

14
@MagicOctopusUrn:はい、私はそれが非常に貧弱なネーミングだったことに同意します-それは時間の経過とともに多くの混乱を引き起こしました。
Jon Skeet、2018

メソッドの非常に悪い命名。なぜそれら(Sun / Oracle)は単純なことを複雑にするのですか
Stunner

93

エスケープを追加する方法はPattern.quote()です。

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

しかし、ジョンが言うように、あなたはただ使うことができますreplace()replaceAll名前から外れているという事実にもかかわらず、それはのようにすべての出現を置き換えますreplaceAll()


たとえば、matchingStrに「$」がある場合は、完全に機能します。
Julien Lafont 2015

むしろPattern.compile(); Pattern.quote()が望ましくない結果をもたらす
Pavlo Zvarych

@PavloZvarych:Pattern.compile()文字列を正規表現としてコンパイルします。つまり、特殊文字には特別な意味が与えられます。それは何Pattern.quote()をするか、OPが求めていたものとは正反対です(quote()「文字列をリテラルとして扱う」と言います)。たぶん、あなたはあなたが話している「望ましくない結果」を拡大することができるでしょう。
マークピーターズ

@MarkPeters "$ 1"は\\ G1 \\ Gのようなものでした
Pavlo Zvarych

1
@PavloZvarych:(検索パターンではなく)置換を引用しようとしている場合は、を使用しますMatcher.quoteReplacement("$aa +")。 ではなくをPattern.compile()生成するPatternので、Stringでどのように使用しているかは不明ですreplaceAll
マークピーターズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.