字符串中的Java字符替换

字符串中的Java字符替换,java,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) == '-') &&

我在替换字符串中的字符时遇到了一些问题。该代码在删除连字符和句点时效果非常好,但是对于字母“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);
String str=“这是一个测试字符串,12345!-12e3.0 eee”;
对于(int i=0;i
在每种情况下,
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);
char[]chars=str.toCharArray();
for(int i=0;i
或者,为了避免重复,将中间部分替换为:

for (int i = 0; i < chars.length - 1; i++) {
    if (Character.isDigit(chars[i + 1]) &&
        (chars[i] == '-' || chars[i] == 'e' || chars[i] == '.')) {
        chars[i] = '*';
    }
}
for(int i=0;i
str.replace(str.charAt(i),“*”)将替换所有字符

可以使用StringBuilder替换字符串中的特定字符。请复习这个问题和答案


也许您应该在for循环的末尾写出
str
的内容。然后你可以看到什么时候会发生。这听起来正是你应该期望的:它用“*”s替换所有的“e”。如果我是最后一个字符,并且你试图计算str.charAt(i+1),你可能会有问题。你希望你的程序得到修复,还是可以显示一个更简单的解决方案?逻辑and必须都是真的,答案才是真的。