2012-04-16 35 views

答えて

3

はあなたがでReplaceAll()の特殊文字として扱われますが使用しているPatternクラスとして各バックスラッシュ(再び)を倍にする必要があります。これは、あなたが望む結果を得るために、すべてのバックスラッシュを倍増する必要があることを意味します:エスケープ文字として

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

A Java文字列の扱いのバックスラッシュはそうでReplaceAllが見ているものである:\\\\xyz\\abc。正規表現は、文字になるようにしかしでReplaceAllも、エスケープ文字としてバックスラッシュを扱う:各について\\xyz\abc

2

replaceAll()は、バックスラッシュをエスケープ文字として使用するregexpsを使用します。さらに、Java String構文では、エスケープ文字としてバックスラッシュも使用されます。

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

を「\」あなたが置く必要があり、あなたの文字列に「\\」にreplaceAll方法。

+0

回答の各「 '\'」については、「\\」をmrkupに入れてください。 – Rawling

+1

oops :)が更新されました。私は同じことに落ちた面白い... – giorashc

3

\はC言語のようなエスケープ文字です(このフォーラムのエスケープでさえも)。これはファイルセパレータにとって貧弱な選択ですが、MS-DOSで導入された変更になります。 ..あなたが持っている

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

あなたがこれですスラッシュを使用することができる場合はるかに簡単です

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

これは例の文字列です。実際の文字列はWindowsの共有パスなので、置き換えることはできません。 – thedp

2

replaceAllは入力文字列として正規表現を想定しており、すべてのインスタンスで一致し置換されます。バックスラッシュは正規表現の特殊なエスケープ文字です。それにマッチさせるには、エスケープするために別のバックスラッシュが必要です。したがって、文字列を"\"と一致させるには、正規表現に '"\"を指定する必要があります。あなたは自分のユースケースに代わりでReplaceAllを置き換える方法を使用することができます

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

:文字列"\\\\xyz\\abc"あなたが正規表現"\\\\\\\\xyz\\\\abc"を(各ソース\のための余分な\に注意してください)必要に一致するように

。私が間違っていない場合は正規表現を使用しません。

0

あなたはString

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

から\\\\xyz\\abcを削除しますこれもreplace()方法を使用することができるでReplaceAllメソッドを使用すると、スラッシュをエスケープしなければならないことを意味し、正規表現を使用しています。あなたの場合、代わりにString.replaceを使用すると意味があります:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\"; 
jarPath = jarPath.replace("\\\\xyz\\abc", "z:"); 
関連する問題