2

重複の可能性:
java.lang.String.replace 問題のヒント?
Java での string.replace() の使用

「/」が「_」に置き換えられないのはなぜですか?

public static void main(String[] args) throws IOException {
    String file = "A/B";
    file.replaceAll("/", "_");
    System.out.println(file);
}
4

6 に答える 6

5

のインスタンスjava.lang.String不変であるため*replaceAll正しい文字列を返しますが、プログラムはそれを破棄します。問題を修正するには、プログラムを次のように変更します。

file = file.replaceAll("/", "_");


*これは、「変更不可」と言うための凝った言い方です。文字列インスタンス"A/B"が作成されると、その値を変更するために呼び出すことができるメソッドはありません。

于 2012-10-09T15:52:41.797 に答える
3

インスタンスは不変であるため、file.replaceAll()呼び出しの結果を保存する必要があります。String

file = file.replaceAll("/", "_");
于 2012-10-09T15:52:33.127 に答える
1

replaceAll の結果を割り当てる必要があります。

public static void main(String[] args) throws IOException {
    String file = "A/B";
    String newFile = file.replaceAll("/", "_");
    System.out.println(newFile);
}
于 2012-10-09T15:54:41.250 に答える
1
file.replaceAll("/", "_");

Java の String はimmutableであるため、だけでなく、String クラスのメソッドはreplaceAll既存の String を変更しません。代わりに、新しい String を作成してそれを返します。したがって、返された文字列をfile..

file = file.replaceAll("/", "_");
于 2012-10-09T15:54:44.687 に答える
0

String.replaceAlljavadocを注意深く見てください。文字列を返します。

このような方法では、パラメータは変更されません。したがって、次のように書く必要があります。

String file = "A/B";
file = file.replaceAll("/", "_");
于 2012-10-09T15:55:25.983 に答える
0

不変プロパティについて読む必要があります。

不変のプロパティ

多くのプログラミング言語で文字列が不変なのはなぜですか?

于 2012-10-09T16:07:38.513 に答える