TL; DR
- あなたが正規表現構文を使用
replaceAll
またはreplaceFirst
が必要な場合は、
- あなたはリテラルが
replace
を使用すると、あなたのtarget/replacement
ペアが扱われることを望むならば(それはまたを置き換えますすべてあなたのターゲットのオカレンス)。
ほとんどの人がしているStringクラスのメソッドを置き換えるの不幸な命名で混乱している:
replaceAll(String, String)
replaceFirst(String, String)
replace(CharSequence, CharSequence)
replace(char, char)
replaceAll
方法が明示的にそれがすべてかのうターゲットを置き換えることを主張しているので、人々はそれがAll
サフィックスが含まれていないので、replace
方法は、このような動作を保証するものではありませんしないことを前提としています。
しかし、この仮定は間違っています。これらの方法の間
主な違いは、この表に示されている:
╔═════════════════════╦═══════════════════════════════════════════════════════════════════╗
║ ║ replaced targets ║
║ ╠════════════════════════════════════╦══════════════════════════════╣
║ ║ ALL found ║ ONLY FIRST found ║
╠══════╦══════════════╬════════════════════════════════════╬══════════════════════════════╣
║ ║ supported ║ replaceAll(String, String) ║ replaceFirst(String, String) ║
║regex ╠══════════════╬════════════════════════════════════╬══════════════════════════════╣
║syntax║ not ║ replace(CharSequence, CharSequence)║ \/ ║
║ ║ supported ║ replace(char, char) ║ /\ ║
╚══════╩══════════════╩════════════════════════════════════╩══════════════════════════════╝
今、あなたはそれを期待していない正規表現構文の使用方法を使用する必要はありませんが、それはtarget
とreplacement
を扱う場合リテラルとして。
ので、代わりのreplaceAll(regex, replacement)
使用replace(literal, replacement)
。
ご覧のとおり、replace
の2つのオーバーロードされたバージョンがあります。彼らは正規表現の構文をサポートしていないので、両方ともあなたのために働くはずです。
replace(char target, char replacement)
は、単に新しい文字列を作成し、(文字をターゲットに等しかった場合によっては)それはどちらかの元の文字列から文字、または文字で、あなたが代替として決め埋める:それらの間の主な違いは、ということですreplace(CharSequence target, CharSequence replacement)
は がreplaceAll
と同じであることを意味するreplaceAll(Pattern.quote(target), Matcher.quoteReplacement(replacement.toString())
の本質的に同等であるが、(意味し、それは内部で正規表現エンジンを使用)が、はそれが自動的に私たちのためtarget
とreplacement
で使用される正規表現のメタ文字をエスケープ
は、 'replaceAll'の代わりに' replace'を使います。 – Pshemo
@Pshemo:彼らの行動は異なっていますか? – Jim
ドキュメントを読む... 'replace(char、char)'と 'replace(String、String)'があります。 – Pshemo