String \something\をString \\something\\usingに変換しようとしてreplaceAllいますが、あらゆる種類のエラーが発生し続けます。これが解決策だと思いました:
theString.replaceAll("\\", "\\\\");
しかし、これは以下の例外を与えます:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
String \something\をString \\something\\usingに変換しようとしてreplaceAllいますが、あらゆる種類のエラーが発生し続けます。これが解決策だと思いました:
theString.replaceAll("\\", "\\\\");
しかし、これは以下の例外を与えます:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
は、引数を正規表現String#replaceAll()として解釈します。はとの両方のエスケープ文字です。正規表現のためにそれをダブルエスケープする必要があります:\ Stringregex
string.replaceAll("\\\\", "\\\\\\\\");
ただし、文字ごとの正確な置換が必要であり、ここでパターンが必要ないという理由だけで、これに正規表現が必ずしも必要なわけではありません。したがって、String#replace()十分なはずです:
string.replace("\\", "\\\\");
更新:コメントによると、JavaScriptコンテキストで文字列を使用したいようです。StringEscapeUtils#escapeEcmaScript()代わりに、より多くの文字をカバーするために使用したほうがよいでしょう。
この種の問題を回避するには、 (正規表現を使用するreplace)の代わりに(単純な文字列を使用する)を使用できます。replaceAllバックスラッシュをエスケープする必要がありますが、正規表現で必要とされるワイルドな方法ではエスケープする必要はありません。
最初の引数は正規表現であるため、(エスケープされた)バックスラッシュをエスケープする必要があります。置換(2番目の引数-Matcher#replaceAll(String)を参照)にもバックスラッシュの特別な意味があるため、これらを次のように置き換える必要があります。
theString.replaceAll("\\\\", "\\\\\\\\");
はい...正規表現コンパイラが指定したパターンを認識するまでに、バックスラッシュは1つしか見えません(Javaのレクサーがダブルバックワックを1つに変えたため)。信じられないかもしれません"\\\\"が、に置き換える必要があります。"\\\\"Javaには、優れた生の文字列構文が本当に必要です。