1

我在替换字符串中的字符时遇到了一些麻烦。该代码可以很好地删除连字符和句点,但是对于字母“e”,它会删除“test”中的“e”,并且它还会转换字符串末尾的三个“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), '*')

...对整个字符串执行替换。

最简单的解决方法可能是将其转换为一个字符数组以开始,一次替换一个字符,然后为其余字符创建一个字符串:

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 替换字符串中的特定字符。请查看此问题和答案。

替换字符串中特定索引处的字符?

于 2012-10-15T22:07:06.227 回答