1

文字列内の文字の置換に問題があります。このコードは、ハイフンとピリオドの削除には問題なく機能しますが、文字 'e' については、"test" の 'e' を削除し、文字列の末尾にある 3 つの 'e' も変換します。なぜこれが起こっているのか誰にも分かりますか?

        String str = "This is a test string, 12345! -12e3.0 eee";
    for(int i = 0; i < str.length(); i++) {
        if((str.charAt(i) == '-') && (Character.isDigit(str.charAt(i+1)))) {
            str = str.replace(str.charAt(i), '*');
        }

        if((str.charAt(i) == 'e') && (Character.isDigit(str.charAt(i+1)))) {
            str = str.replace(str.charAt(i), '*');
        }

        if((str.charAt(i) == '.') && (Character.isDigit(str.charAt(i+1)))) {
            str = str.replace(str.charAt(i), '*');
        }
    }
    str = str.replaceAll("[1234567890]", "*");
    System.out.println(str);
4

2 に答える 2

3

いずれの場合も、ifパーツは文字を置換する必要があるかどうかを見つけるだけですが、置換自体は次のようになります。

str = str.replace(str.charAt(i), '*')

...文字列全体に対してその置換を実行します。

これに対する最も簡単な修正は、おそらく最初に文字の配列に変換し、一度に 1 文字ずつ置き換えてから、残りの文字列を作成することです。

char[] chars = str.toCharArray();
for (int i = 0; i < chars.length - 1; i++) {
    if (chars[i] == '-' && Character.isDigit(chars[i + 1])) {
        chars[i] = '*';
    }
    // Similarly for the other two
}
String newString = new String(chars);

または、重複を避けるために、中央のセクションを次のものに置き換えます。

for (int i = 0; i < chars.length - 1; i++) {
    if (Character.isDigit(chars[i + 1]) &&
        (chars[i] == '-' || chars[i] == 'e' || chars[i] == '.')) {
        chars[i] = '*';
    }
}
于 2012-10-15T22:05:18.473 に答える
0

str.replace(str.charAt(i), '*');すべての文字を置き換えます。 Javadoc

StringBuilder を使用して、String 内の特定の文字を置き換えることができます。この質問と回答を確認してください。

文字列内の特定のインデックスにある文字を置換する

于 2012-10-15T22:07:06.227 に答える