web-dev-qa-db-ja.com

文字列はバックスラッシュを置き換えます

バックスラッシュの文字列置換を行うにはどうすればよいですか。

入力ソース文字列:

sSource = "http://www.example.com\/value";

上記の文字列では、「\ /」を「/」に置き換えます。

置換後の期待出力:

sSource = "http://www.example.com/value";

サードパーティからソース文字列を取得するため、文字列の形式を制御できます。

これは私が試したことです

試行1:

sSource.replaceAll("\\", "/");

例外インデックス1付近の予期しない内部エラー\

試行2:

 sSource.replaceAll("\\/", "/");

例外はありませんが、必要な交換は行いません。何もしません。

トライアル3:

 sVideoURL.replace("\\", "/"); 

例外はありませんが、必要な交換は行いません。何もしません。

27
kensen john
_sSource = sSource.replace("\\/", "/");
_
  • Stringは不変です-呼び出した各メソッドは状態を変更しません。代わりに、新しい状態を保持する新しいインスタンスを返します。そのため、変数に新しい値を割り当てる必要があります(同じ変数でもかまいません)
  • replaceAll(..)は正規表現を使用します。あなたはそれを必要としません。
41
Bozho

replaceAll("\\\\", "")またはreplaceAll("\\\\/", "/")を試してください。

ここでの問題は、バックスラッシュが(1)Java-Stringsのエスケープ文字であり、(2)正規表現のエスケープ文字であるということです。この使用法では、文字を2倍にする必要があり、実際には4 \行。


編集:もちろん、Bozhoが言ったように、結果に対して何かを行う(変数に代入する)必要があります。そしてこの場合、非正規表現の方が優れています。

25
Paŭlo Ebermann

試してみる

   sSource = sSource.replaceAll("\\\\", "");

編集:Ok.

これは、バックスラッシュが特殊文字のエスケープ文字(たとえば、\ nなど)と見なされるためです。
さらに、replaceAll最初の引数は、エスケープシーケンスとしてバックスラッシュも使用する正規表現です。
そのため、正規表現には2つのバックスラッシュを渡す必要があります。これら2つのバックスラッシュをJava StringでreplaceAllに渡すには、両方のバックスラッシュをエスケープする必要があります。
それにより、表現に4つのバックスラッシュが必要になります。 Java;)の正規表現の美しさ

7
greydet
s.replaceAll ("\\\\", "");

ソース内のバックスラッシュをマスクする必要があります。正規表現の場合は、再度マスクする必要があるため、バックスラッシュごとに2つ必要で、4で終わります。

しかし

s = "http://www.example.com\\/value";

ソースにも2つのバックスラッシュが必要です。

7
user unknown

これにより、文字列のバックスラッシュがスラッシュに置き換えられます。

source = source.replace('\\','/');
4
Dale

あなたはしなければならない

sSource.replaceAll("\\\\/", "/");

正規表現のソース1の文字列に対してバックスラッシュを2回エスケープする必要があるため

2
Xavier Combelle

特定の場所でバックスラッシュを置き換えるには:

if ((stringValue.contains("\\"))&&(stringValue.indexOf("\\", location-1)==(location-1))) {
    stringValue=stringValue.substring(0,location-1);
}
0
suyog talekar
 sSource = StringUtils.replace(sSource, "\\/", "/")
0
Gustavo