Java - 字符串中的字符替换

时间:2012-10-15 21:59:18

标签: java

我在替换字符串中的字符时遇到了一些麻烦。代码对于删除连字符的句点非常合适,但对于字母“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);

2 个答案:

答案 0 :(得分: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] = '*';
    }
}

答案 1 :(得分:0)

str.replace(str.charAt(i), '*');将替换所有字符。 Javadoc

您可以使用StringBuilder替换String中的特定字符。请查看此问题和答案。

Replace a character at a specific index in a string?