8
String x = "Welcome to Java World";
System.out.println(x.replaceAll(".*","JAVA"));
Actual Output = "JAVAJAVA" .
Excepted Output = "JAVA".

なぜそれがこのように置き換えられるのか誰かが助けることができますか?「。*」は元の文字列のすべての文字で、これを「JAVA」に置き換えます。これが「JAVAJAVA」を返す理由。

4

4 に答える 4

15

正規表現は、すべての文字に 0 を一致させることができます。最初に string 全体に一致し"Welcome to Java World"、次に string の末尾に一致し、""両方を に置き換え"JAVA"ます。

これを期待どおりに機能させるには、いくつかのオプションがあります。

String x = "Welcome to Java World";
System.out.println(x.replaceAll(".+","JAVA"));

* の代わりに + に注意してください。これは 1 つ以上を意味するため、末尾は一致しません。

また

String x = "Welcome to Java World";
System.out.println(x.replaceFirst(".*","JAVA"));

これは、文字列全体を に置き換えるだけ"JAVA"で、文字列の空の末尾は置き換えられません。

于 2012-05-04T13:03:44.997 に答える
1

以下の形式 x.replaceAll(".*\z", "JAVA"); も使用できます。

.* は文字列の末尾まで一致し、\z は文字列の末尾に一致します。

于 2012-05-04T13:22:55.870 に答える
1

replaceAllあなたの使命には必要ありません。単に次のように記述するだけで、まったく同じセマンティクスが実現されます。

System.out.println("JAVA");

StringJava では不変であるため、新しいオブジェクトを取得することは避けられません。

于 2012-05-04T13:06:16.123 に答える
1

「=」ではなく「replaceAll」を使用するのはなぜですか? 文字列はJavaで不変です

于 2012-05-04T13:07:43.917 に答える