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

时间:2018-09-21 17:38:06

标签: 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);

4 个答案:

答案 0 :(得分:4)

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

x x H e l l o
0 1 2 3 4 5 6

然后,当您删除第一个x时:

x H e l l o
0 1 2 3 4 5

因此,在您的第二次迭代中,它将检查第一个索引(在这种情况下为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);

输出:

Hello

答案 1 :(得分:1)

想象一下,您的输入字符串为"XXY"。让我们逐步执行代码:

for(int i = 0; i<2; i++) {
    if((str.charAt(i) == 'x') || (str.charAt(i) == 'X')) {
        str = str.deleteCharAt(i);
    }
}

在第一次迭代中,i等于0,因此我们检查字符串中的第一个字符是否等于'x''X'"XXY"的第一个字符实际上是相等的,因此我们执行if语句的内容:

str = str.deleteCharAt(i);

现在我们的字符串是"XY"。现在我们再次经历循环。

在第二次迭代中,i等于1,因此我们检查字符串中的 second 字符。但是现在我们的字符串是"XY",因此第二个字符是'Y',并且if检查失败。

答案 2 :(得分:1)

您可以使用str.delete(start, end)而不是循环。例如:

String substr = str.substring(0,2).toLowerCase();
str.delete(
    substr.indexOf('x'),
    substr.lastIndexOf('x')+1
);

答案 3 :(得分:0)

由于仅需进行前两个删除操作,因此可以使用内置函数:

Scanner userIn = new Scanner(System.in);        
StringBuilder str =  new StringBuilder();
str.append(userIn.nextLine());
int j=0;
for(int i = 0; i<2; i++) {
    if((str.charAt(j) == 'x') || (str.charAt(j) == 'X')) {
        str = str.deleteCharAt(j);
    }else{
        j++;
    }
}
System.out.println(str);