2

この単純なプログラムの場合...

import java.lang.String;

public class test {

    public static void main(String[] argv) {

        String s = "Hello <BSLASH>";
        String sReplaced = s.replaceAll("<BSLASH>", "\\\\");

        System.out.println("s = " + s);
        System.out.println("sReplaced = " + sReplaced);

    }
}

sReplacedがHello\\と2つの円記号で等しくないのはなぜですか?

$javac test.java
$ java test
s = Hello <BSLASH>
sReplaced = Hello \
4

4 に答える 4

3

replaceAllこれには使用しないでください、使用してくださいreplace

String sReplaced = s.replace("<BSLASH>", "\\\\");

replaceAllここでは必要ない正規表現を取ります(これが\\\\に評価される理由\です)。

ああ、本当に必要ありませんimport java.lang.String-Stringクラスはデフォルトでインポートされます。

于 2012-11-27T22:29:52.343 に答える
2

replaceAllは正規表現を使用するため、実際には4つのスラッシュを2つにエスケープし、バックスラッシュのエスケープは別のバックスラッシュになります。

したがって、コードは実際には\

2つの円記号に置き換えるには、次のようにする必要があります。

String sReplaced = s.replaceAll("<BSLASH>", "\\\\\\\\");
于 2012-11-27T22:29:22.950 に答える
1

2つの円記号を取得するには、合計8つの円記号を使用する必要があります。単一のバックスラッシュは1つのバックスラッシュでエスケープする必要があります。バックスラッシュはメタ文字であり、正規表現の世界です。通常の文字と見なすには、2つのバックスラッシュで再度エスケープする必要があります。

 String sReplaced = s.replaceAll("<BSLASH>", "\\\\\\\\");
于 2012-11-27T22:27:47.127 に答える
-1

replace代わりに使用することもお勧めしますreplaceAll。ここでは、問題を修正し、Java文字列でバックスラッシュを使用する方法を説明するためのコードを記述します。

String bs1="\\";
String bs2="\\";
String sReplaced = s.replace("<BSLASH>", bs1.concat(bs2));
于 2012-11-27T22:44:27.983 に答える