string を持っているがa"b"c"、取得したい場合a\"b\"c\"、自然に書くでしょう
String t = "a\"b\"c\"";
t = t.replaceAll("\"", "\\\"");
ただし、同じ文字列a"b"c". 正しい方法は
t.replaceAll("\"", "\\\\\"");
なんで?
replaceAllパターンと置換の両方に正規表現を使用します。どちらもバックスラッシュをエスケープする必要があります。したがって、2 番目の引数に必要な正規表現置換パターンは次のとおりです。
\\"
\とJava"の文字列リテラルもエスケープする必要があるため、これらの各文字には追加のバックスラッシュが必要です。引用符を追加すると、次のようになります。
"\\\\\""
これは、ソースにあるものです。
正規表現を使わずString.replaceに which を使えば簡単です。そうすれば、この文字列 (文字列リテラルではなく) を 2 番目の引数として提供しようとしているだけです。
\"
エスケープして文字列リテラルに変換すると、次のようになります。
"\\\""
これはまだ素晴らしいとは言えませんが、少なくとも改善されています。
別の方法は、次のように使用することreplaceAllですMatcher.quoteReplacement。
t = t.replaceAll("\"", Matcher.quoteReplacement("\\\""));
個人的には、私はただ使用したいと思いreplace()ます。結局のところ、正規表現の置換は必要ありません。