我试图仅从第一个索引和第二个索引中删除所有“ 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);
答案 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);