2

部分文字列の置換を実装しようとしていますが、望ましい結果が得られません。ここで私が見逃している可能性があることについて誰かがコメントできますか?

public class SubtringReplacement {

    public static void main (String[] args){

        String input = "xPIy";
        if (input.contains("PI") || input.contains("pi") || input.contains("Pi")){
            input.replace("PI", "3.14");
        }
        System.out.println(input);
    }

}
4

3 に答える 3

8

文字列は不変です!!

input = input.replace("PI", "3.14");
于 2012-10-24T21:55:44.307 に答える
2

1 つの問題は、置換を行うときに戻り値を取得する必要があることです。"PI"もう1つの問題は、大文字と小文字が混在するインスタンスを置き換えたいように見えるのに、大文字のみを置き換えることです。代わりにこれを試してください:

input = input.replaceAll("(PI|pi|Pi)", "3.14");

replaceリテラルマッチを探します。replaceAll必要なものである正規表現の一致を行います。

ちなみに、if条件は必要ありません。一致しない場合は、代替品はありません。

PS のインスタンスも置き換えたい場合は、@NullUserException のコメントを参照してください"pI"

于 2012-10-24T21:57:15.077 に答える
0

明らかに、指定された条件でコードを機能させるための左側の割り当てがありませんでした。

    input.replace("PI", "3.14");

inputただし、含まれている場合は、および同様PIに試行されますが、置換されるだけです。これをより適切に処理するには、 orを置換パターンとして使用できると思います。これは、次の例の 1 回の出現に続いて 1 回の出現を検索します。piPi"[pP][iI]""[pP]{1}[iI]{1}"P or pI or i

   String input = "xPIyPizpIapib";
   input = input.replaceAll("[pP][iI]", "3.14"); 
   System.out.println(input); //<- all "pi"s irrespective of case are replaced.

   String input = "xPIyPizpIapib";
   input = input.replaceAll("[pP]{1}[iI]{1}", "3.14"); 
   System.out.println(input); //<- all "pi"s irrespective of case are replaced.

注意してください: これはpI、見つかった場合も同様に置き換えられます。

于 2012-10-24T22:19:40.503 に答える