2 つの説明:
1.二重のバックスラッシュを1つに置き換えます(あなたが求めたものではありません)
バックスラッシュをバックスラッシュでエスケープする必要があります。このような:
String newPath = oldPath.replaceAll("\\\\\\\\", "\\");
最初のパラメーターは 2 回エスケープする必要があります。1 回は Java コンパイラ用で、もう 1 回は正規表現を使用するためです。したがって、2 つのバックスラッシュを 1 つに置き換えます。したがって、バックスラッシュをエスケープする必要があるため、バックスラッシュを 1 つ追加します。今、あなたは持ってい\\
ます。これは にコンパイルされ\
ます。しかし!!replaceAll メソッドの最初のパラメーターは正規表現を使用するため、バックスラッシュをもう一度エスケープする必要があります。エスケープするには、バックスラッシュを追加しますが、そのバックスラッシュはエスケープする必要があるため、\\\\
. これらのバックスラッシュは、正規表現の 1 つのバックスラッシュを表します。しかし、二重のバックスラッシュを 1 つに置き換えたいとします。したがって、8 つのバックスラッシュを使用します。
replaceAll メソッドの 2 番目のパラメーターは正規表現を使用していませんが、同様にエスケープする必要があります。そのため、Java コンパイラ用に 1 回、replace メソッド用に 1 回エスケープする必要があります\\\\
。これは 2 つのバックスラッシュにコンパイルされ、replaceAll メソッドでは 1 つのバックスラッシュとして解釈されます。
2.単一のバックスラッシュをバックスラッシュのペアに置き換えます(あなたが求めたもの)
String newPath = oldPath.replaceAll("\\\\", "\\\\\\\\");
上記と同じロジック。
3.replace()
の代わりに使用しreplaceAll()
ます。
String newPath = oldPath.replace("\\", "\\\\");
違いは、このreplace()
メソッドは正規表現を使用しないため、最初のパラメーターですべてのバックスラッシュを 2 回エスケープする必要がないことです。
うまく説明できればいいのですが…
-- 編集: xehpuk が指摘したエラーを修正 --