文字列の先頭をバックスラッシュで別のものに置き換えようとしています。奇妙な理由で、replaceAll 関数はバックスラッシュを好みません。
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");
この問題を解決するにはどうすればよいですか。
ありがとうございました。
文字列の先頭をバックスラッシュで別のものに置き換えようとしています。奇妙な理由で、replaceAll 関数はバックスラッシュを好みません。
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");
この問題を解決するにはどうすればよいですか。
ありがとうございました。
replaceAll() で使用される Pattern クラスがバックスラッシュを特殊文字として扱うため、各バックスラッシュを (再び) 2 倍にする必要があります。
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
Java 文字列はバックスラッシュをエスケープ文字として扱います\\\\xyz\\abc
。しかし、replaceAll はバックスラッシュもエスケープ文字として扱うため、正規表現は次の文字になります。\
\
x
y
z
\
a
b
c
C のような言語のエスケープ文字であるため (このフォーラムのエスケープとしても)、それは好きではありません。これ\
は、ファイル区切り文字としては不適切な選択ですが、MS-DOS で導入された変更です...
あなたが抱えている問題は、\
2回エスケープしたため、文字列に\\host\path
なり\\\\host\\path
ますが、正規表現を再度エスケープする必要があることです:P\\\\\\\\host\\\\path
スラッシュを使用できる場合、これははるかに簡単です
String jarPath = "//xyz/abc/wtf/lame/";
jarPath = jarPath.replaceAll("//xyz/abc", "z:");
replaceAll() は、バックスラッシュをエスケープ文字として使用する正規表現を使用します。さらに、Java String 構文ではバックスラッシュもエスケープ文字として使用されます。これは、必要なものを取得するには、すべてのバックスラッシュを 2 倍にする必要があることを意味します。
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
replaceAll
は入力文字列として正規表現を想定しており、すべてのインスタンスで一致して置換されます。バックスラッシュは正規表現の特殊なエスケープ文字であり、これに一致させるにはエスケープする別のバックスラッシュが必要です。したがって、文字列を と一致させるには"\"
、'"\"` を含む正規表現が必要です。
文字列に一致させるに"\\\\xyz\\abc"
は、正規表現が必要です( source ごと"\\\\\\\\xyz\\\\abc"
に余分に注意してください)。\
\
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
replaceAll
文字列内の「\」ごとに、メソッドに「\\」を入れる必要があります。
replaceAll メソッドは正規表現を使用するため、スラッシュをエスケープする必要があります。あなたの場合、代わりに String.replace を使用するのが理にかなっているかもしれません:
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
ユースケースでは、replaceAll の代わりに replace メソッドを使用できます。私が間違っていなければ、正規表現を使用していません。
からreplace()
削除するメソッドも使用できます\\\\xyz\\abc
String
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");