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

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

最佳答案

这是因为当您删除开头的字母时,所有字符都会移动。所以对于 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

关于java - 尝试以特定方式从 StringBuilder 中删除多个特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52448645/

相关文章:

java - Selenium Webdriver TestNG 测试彼此都是 "overwriting"

java - 使用 joda time 获取自 2000 年以来的秒数

java - 如何修复此使用泛型的代码中的 "method not applicable to arguments"问题

java - 为什么我的程序抛出 StringIndexOutOfBounds 异常?

java - String 和 StringBuilder 操作在内存使用方面的比较

javadoc @global 或 @memberAttribute

java - 吉布克斯 : how to remove the word "List" from auto generated java collections?

java - StringBuilder 最有效的初始容量大小?

c++ - for循环中的Qt字符串生成器

java - 为什么 StringBuilder 表现得像引用传递