Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试以特定的方式从StringBuilder中删除多个特定字符_Java_Stringbuilder - Fatal编程技术网

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

Java 尝试以特定的方式从StringBuilder中删除多个特定字符,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(

我试图删除第一个和第二个索引中的每个“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);
Scanner userIn=新扫描仪(System.in);
StringBuilder str=新的StringBuilder();
str.append(userIn.nextLine());

对于(int i=0;i这是因为当您在开头删除字母时,所有字符都会移位。对于
String str=“xxHello”;

然后,删除第一个
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);
输出:


这是因为当您删除一个字母的开头时,所有字符都会移位。因此对于
String str=“xxHello”

然后,删除第一个
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);
输出:


假设您的输入字符串是
“XXY”
。让我们逐步了解您的代码:

现在我们的字符串是
“XY”
,现在我们再次遍历循环


在第二次迭代中,
i
等于
1
,因此我们检查字符串中的第二个字符。但是现在我们的字符串是
“XY”
,因此第二个字符是
“Y”
,如果
检查失败,则检查失败。

假设您的输入字符串是
“XXY”
。让我们逐步检查您的代码:

现在我们的字符串是
“XY”
,现在我们再次遍历循环


在第二次迭代中,
i
等于
1
,因此我们检查字符串中的第二个字符。但是现在我们的字符串是
“XY”
,因此第二个字符是
'Y'
,如果
检查失败,则检查

因为只有前两个删除操作,所以可以使用内置函数:

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);
Scanner userIn=新扫描仪(System.in);
StringBuilder str=新的StringBuilder();
str.append(userIn.nextLine());
int j=0;

对于(int i=0;i,因为只有前两次删除,所以可以使用内置函数:

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);
Scanner userIn=新扫描仪(System.in);
StringBuilder str=新的StringBuilder();
str.append(userIn.nextLine());
int j=0;

对于(int i=0;i您可以使用
str.delete(start,end)
而不是循环。例如:

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

您可以使用
str.delete(start,end)
代替循环。例如:

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

这是学习电源调试的绝佳机会。检查
str
str.charAt(i)的值在每一个循环迭代期间,。为了便于调试,在测试开始时删除用户输入并对字符串进行硬编码。如果在索引0删除字符:如果索引1中的字符被移到索引0……您的问题可以通过步骤调试器很快和容易地回答。在进入StackOverflow之前,请先使用step调试器解决您的问题。这是学习power调试的绝佳机会。请检查
str
str.charAt(i)的值在每一个循环迭代期间,。为了便于调试,在测试开始时删除用户输入并对字符串进行硬编码。如果在索引0删除字符:如果索引1中的字符被移到索引0……您的问题可以通过步骤调试器很快和容易地回答。在进入StackOverflow之前,使用step调试器解决您的问题。不执行指定的操作,例如“abcxx”(即“(…)仅从第一个和第二个索引开始),因为问题只是第一个和第二个索引位置,所以这是绝对正确的。Op的代码清楚地表明,他们只关心
str.charAt(0)
str.charAt(1)
。明白了。我编辑了答案,但没有按照问题的要求去做,例如“abcxx”(即“(…)只从第一个和第二个索引中),因为它只是第一个和第二个索引位置,所以这是绝对正确的。op的代码清楚地表明,他们只关心
str.charAt(0)
str.charAt(1)
。明白了。我已经编辑了答案