尝试以特定方式从 StringBuilder 中删除多个特定字符

Hum*_*bir 2 java stringbuilder

我试图仅从第一个和第二个索引中删除每个“x”(无论大小写),但我的程序仅删除第一个索引的字母,然后循环而不删除第二个索引。

    Scanner userIn = new Scanner(System.in);        
    StringBuilder str =  new StringBuilder();
    str.append(userIn.nextLine());

    for(int i = 0; i<2; i++) {
        if((str.charAt(i) == 'x') || (str.charAt(i) == 'X')) {
            str = str.deleteCharAt(i);
        }
    }
    System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

GBl*_*ett 5

这是因为当您删除开头的字母时,所有字符都会发生变化。因此对于String str = "xxHello";

x x H e l l o
0 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

然后当你删除第一个时x

x H e l l o
0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

因此,在第二次迭代中,它将检查第一个索引(在本例中H)是否为X。要解决此问题,您可以设置i为 1,然后循环到零:

StringBuilder str =  new StringBuilder();
str.append(userIn.nextLine());

for(int i = 1; i> -1; i--) {
    if((str.charAt(i) == 'x') || (str.charAt(i) == 'X')) {
        str = str.deleteCharAt(i);
    }
}
System.out.println(str);
Run Code Online (Sandbox Code Playgroud)

输出:

Hello
Run Code Online (Sandbox Code Playgroud)