1

文字列の先頭をバックスラッシュで別のものに置き換えようとしています。奇妙な理由で、replaceAll 関数はバックスラッシュを好みません。

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");

この問題を解決するにはどうすればよいですか。

ありがとうございました。

4

9 に答える 9

3

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

于 2012-04-16T09:49:07.617 に答える
3

C のような言語のエスケープ文字であるため (このフォーラムのエスケープとしても)、それは好きではありません。これ\は、ファイル区切り文字としては不適切な選択ですが、MS-DOS で導入された変更です...

あなたが抱えている問題は、\2回エスケープしたため、文字列に\\host\pathなり\\\\host\\pathますが、正規表現を再度エスケープする必要があることです:P\\\\\\\\host\\\\path

スラッシュを使用できる場合、これははるかに簡単です

String jarPath = "//xyz/abc/wtf/lame/";
jarPath = jarPath.replaceAll("//xyz/abc", "z:");
于 2012-04-16T09:49:35.267 に答える
2

replaceAll() は、バックスラッシュをエスケープ文字として使用する正規表現を使用します。さらに、Java String 構文ではバックスラッシュもエスケープ文字として使用されます。これは、必要なものを取得するには、すべてのバックスラッシュを 2 倍にする必要があることを意味します。

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
于 2012-04-16T09:49:05.400 に答える
2

replaceAllは入力文字列として正規表現を想定しており、すべてのインスタンスで一致して置換されます。バックスラッシュは正規表現の特殊なエスケープ文字であり、これに一致させるにはエスケープする別のバックスラッシュが必要です。したがって、文字列を と一致させるには"\"、'"\"` を含む正規表現が必要です。

文字列に一致させるに"\\\\xyz\\abc"は、正規表現が必要です( source ごと"\\\\\\\\xyz\\\\abc"に余分に注意してください)。\\

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
于 2012-04-16T09:50:52.793 に答える
1
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");

replaceAll文字列内の「\」ごとに、メソッドに「\\」を入れる必要があります。

于 2012-04-16T09:49:13.437 に答える
1

replaceAll メソッドは正規表現を使用するため、スラッシュをエスケープする必要があります。あなたの場合、代わりに String.replace を使用するのが理にかなっているかもしれません:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
于 2012-04-16T09:53:14.977 に答える
0

ユースケースでは、replaceAll の代わりに replace メソッドを使用できます。私が間違っていなければ、正規表現を使用していません。

于 2012-04-16T09:51:25.273 に答える
0

からreplace()削除するメソッドも使用できます\\\\xyz\\abcString

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
于 2012-04-16T09:51:28.187 に答える