38

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

入力ソース文字列:

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

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

置換後の期待される出力:

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

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

これは私が試したものです

試行 1:

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

例外 インデックス 1 付近で予期しない内部エラーが発生しました \

試行 2:

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

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

試行 3:

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

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

4

9 に答える 9

52
sSource = sSource.replace("\\/", "/");
  • String不変です - あなたが呼び出す各メソッドは、その状態を変更しません。代わりに、新しい状態を保持する新しいインスタンスを返します。したがって、新しい値を変数に割り当てる必要があります(同じ変数にすることができます)
  • replaceAll(..)正規表現を使用します。あなたはそれを必要としません。
于 2011-04-08T14:20:47.533 に答える
31

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

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

もちろん、Bozho が言ったように、結果を破棄するのではなく、結果に対して何らかの処理を行う (変数に代入する) 必要があります。この場合、非正規表現の方が優れています。

于 2011-04-08T14:22:14.573 に答える
10

試す

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

編集:スタックオーバーフローでもバックスラッシュエスケープがあります...replaceAllの最初の文字列引数に4つのバックスラッシュが必要です...

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

于 2011-04-08T14:20:48.113 に答える
7
s.replaceAll ("\\\\", "");

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

しかし

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

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

于 2011-04-08T14:31:58.993 に答える
2

あなたがしなければなりません

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

バックスラッシュは、正規表現のソースの文字列の 1 つで 2 回エスケープする必要があるためです。

于 2011-04-08T14:24:04.340 に答える
0
 sSource = StringUtils.replace(sSource, "\\/", "/")
于 2014-10-15T11:08:50.347 に答える
0

わたしにはできる

sSource = sSource.replace("\\", "");
于 2021-10-11T20:35:20.197 に答える