バックスラッシュの文字列置換を行うにはどうすればよいですか。
入力ソース文字列:
sSource = "http://www.example.com\/value";
上記の文字列では、「\ /」を「/」に置き換えます。
置換後の期待出力:
sSource = "http://www.example.com/value";
サードパーティからソース文字列を取得するため、文字列の形式を制御できます。
これは私が試したことです
試行1:
sSource.replaceAll("\\", "/");
例外インデックス1付近の予期しない内部エラー\
試行2:
sSource.replaceAll("\\/", "/");
例外はありませんが、必要な交換は行いません。何もしません。
トライアル3:
sVideoURL.replace("\\", "/");
例外はありませんが、必要な交換は行いません。何もしません。
_sSource = sSource.replace("\\/", "/");
_
String
は不変です-呼び出した各メソッドは状態を変更しません。代わりに、新しい状態を保持する新しいインスタンスを返します。そのため、変数に新しい値を割り当てる必要があります(同じ変数でもかまいません)replaceAll(..)
は正規表現を使用します。あなたはそれを必要としません。replaceAll("\\\\", "")
またはreplaceAll("\\\\/", "/")
を試してください。
ここでの問題は、バックスラッシュが(1)Java-Stringsのエスケープ文字であり、(2)正規表現のエスケープ文字であるということです。この使用法では、文字を2倍にする必要があり、実際には4 \
行。
編集:もちろん、Bozhoが言ったように、結果に対して何かを行う(変数に代入する)必要があります。そしてこの場合、非正規表現の方が優れています。
試してみる
sSource = sSource.replaceAll("\\\\", "");
編集:Ok.
これは、バックスラッシュが特殊文字のエスケープ文字(たとえば、\ nなど)と見なされるためです。
さらに、replaceAll最初の引数は、エスケープシーケンスとしてバックスラッシュも使用する正規表現です。
そのため、正規表現には2つのバックスラッシュを渡す必要があります。これら2つのバックスラッシュをJava StringでreplaceAllに渡すには、両方のバックスラッシュをエスケープする必要があります。
それにより、表現に4つのバックスラッシュが必要になります。 Java;)の正規表現の美しさ
s.replaceAll ("\\\\", "");
ソース内のバックスラッシュをマスクする必要があります。正規表現の場合は、再度マスクする必要があるため、バックスラッシュごとに2つ必要で、4で終わります。
しかし
s = "http://www.example.com\\/value";
ソースにも2つのバックスラッシュが必要です。
これにより、文字列のバックスラッシュがスラッシュに置き換えられます。
source = source.replace('\\','/');
あなたはしなければならない
sSource.replaceAll("\\\\/", "/");
正規表現のソース1の文字列に対してバックスラッシュを2回エスケープする必要があるため
特定の場所でバックスラッシュを置き換えるには:
if ((stringValue.contains("\\"))&&(stringValue.indexOf("\\", location-1)==(location-1))) {
stringValue=stringValue.substring(0,location-1);
}
sSource = StringUtils.replace(sSource, "\\/", "/")