83

文字列として渡される文があり、"and" という単語を置換し、" " に置換したいと考えています。そして、「and」という単語を空白に置き換えていません。以下は私のロジックの例です。そして、これをデバッグすると、ロジックは statement.replace に分類されます。

String sentence = "Define, Measure, Analyze, Design and Verify"
if (sentence.contains("and")){
    sentence.replace("and", " ");
}

私がここに欠けているものはありますか?

4

5 に答える 5

176

そして、これをデバッグすると、ロジックは statement.replace に分類されます。

はい、戻り値を破棄します。

Java の文字列は不変です。 を呼び出すと、既存のreplace文字列の内容は変更されません。変更された新しい文字列が返されます。あなたが望んでいるのは:

sentence = sentence.replace("and", " ");

これは、String 内のすべてsubstringのメソッド ( など)に適用されますtoLowerCaseそれらのどれも文字列の内容を変更しません。

条件でこれを行う必要はないことに注意してください。結局のところ、文に が含まれていない"and"場合は、置換を実行しても害はありません。

String sentence = "Define, Measure, Analyze, Design and Verify";
sentence = sentence.replace("and", " ");
于 2012-10-04T19:46:08.317 に答える
69

文字列はimmutableです。つまり、その内容は変更できません。呼び出すreplace(this,that)と、まったく新しい文字列になります。この新しいコピーを保持したい場合は、それを変数に割り当てる必要があります。古い参照を上書きできます (sentence = sentence.replace(this,that)以下に示すように、la または新しい参照:

public class Test{

    public static void main(String[] args) {

        String sentence = "Define, Measure, Analyze, Design and Verify";

        String replaced = sentence.replace("and", "");
        System.out.println(replaced);

    }
}

余談contains()ですが、ここでは不要な呼び出しであるため、チェックを外したことに注意してください。含まれていない場合、置換は置換に失敗します。置き換えているものが、チェックしている実際の状態とは異なる場合にのみ、メソッドを含むことが必要です。

于 2012-10-04T19:47:29.300 に答える
9

の戻り値で何もしていませんreplace。new であるメソッドの結果を割り当てる必要がありますString

sentence = sentence.replace("and", " ");

AStringは Java では不変です。のようなメソッドreplaceは new を返しStringます。

containsテストは不要です。置換するテキストのインスタンスがないreplace場合は何もしません。

于 2012-10-04T19:46:21.410 に答える
8

次のように、置換の結果を再割り当てする必要があります。

 sentence = sentence.replace("and", " ");

Stringクラスはimmutableであることに注意してください。つまり、そのすべてのメソッドは新しい文字列を返し、元の文字列をその場で変更することはありません。そのため、 のインスタンスでメソッドを呼び出した結果はString、変数に割り当てるか、すぐに変更して有効にします。

于 2012-10-04T19:46:21.720 に答える