Java 尝试以特定的方式从StringBuilder中删除多个特定字符
我试图删除第一个和第二个索引中的每个“x”,不管大小写,但我的程序只删除第一个索引的字母,然后循环,而不删除第二个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(
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)
。明白了。我已经编辑了答案