首先,我是Stackoverflow的新手(所以请原谅我的丑陋格式),并且只有几年的编程经验(总共约6个编程类)
我正在做一个刽子手项目。我选择使用StringBuilder
作为其中的一部分。例如,我想检查char chosenLetter = 'C'
在StringBuilder chosenWord = new StringBuilder("Ceramics");
理想情况下,我会有一个for循环来浏览StringBuilder
字“Ceramics”并告诉我索引0
和7
。我完全搞不清楚。我已尝试使用indexOf()
函数,但出于某种原因,如果我这样做
for (int i = 0; i < chosenWord.length(); i++) {
if (chosenWord.indexOf(chosenLetter, i) != -1) {
System.out.println("This should be a match at index " + i);
}
}
它会打印出来例如:
这应该是索引0的匹配
这应该是索引1的匹配
这应该是索引2的匹配
这应该是索引3的匹配
这应该是索引4的匹配
这应该是索引5的匹配
这应该是索引6的匹配
这应该是索引7的匹配
这应该是索引8的匹配
而不是
这应该是索引0的匹配
这应该是索引7的匹配
任何想法如何去做?感谢。
再次,抱歉丑陋的格式。如果对澄清有任何疑问,我很乐意尝试澄清!
答案 0 :(得分:1)
检查出来
for (int i = 0; i < chosenWord.length(); i++) {
if (chosenWord.charAt(i) == chosenLetter) {
System.out.println("This should be a match at index " + i);
}
}
这将打印您想要的输出
答案 1 :(得分:1)
您可以使用StringBuilder#indexOf(String, int)
,但每次成功匹配后都需要确保增加index
位置,否则您将无限循环...
StringBuilder sb = new StringBuilder("ceramics");
int index = 0;
while ((index = sb.indexOf("c", index)) >= 0) {
System.out.println(index);
index++;
}
还应该注意,这是一个区分大小写的搜索,正如您所看到的,我已将文本全部小写,因此我可以捕获位置0
和6
您第一次尝试的基本问题是您实际上忽略了indexOf
if (chosenWord.indexOf(chosenLetter, i) != -1) {
System.out.println("This should be a match at index " + i);
但是然后打印i
,所以在每次迭代中,您得到0
或6
的结果,因此它打印0
的结果的原因 - 6
因此...
i = 0; chosenWord.indexOf(chosenLetter, i) == 6, print 0
i = 1; chosenWord.indexOf(chosenLetter, i) == 6, print 1
i = 2; chosenWord.indexOf(chosenLetter, i) == 6, print 2
i = 3; chosenWord.indexOf(chosenLetter, i) == 6, print 3
i = 4; chosenWord.indexOf(chosenLetter, i) == 6, print 4
i = 5; chosenWord.indexOf(chosenLetter, i) == 6, print 5
i = 6; chosenWord.indexOf(chosenLetter, i) == 6, print 6
i = 7; chosenWord.indexOf(chosenLetter, i) == -1, ignored
你实际上不需要outter循环,只需要保持循环直到indexOf
为< 0
,如上所示...
答案 2 :(得分:0)
您看到该输出的原因是i
将为0
= 6
返回0而i
为1
= {{1}到7
。在所有这些情况下,返回值与-1
不同,后者满足if
语句。考虑使用indexOf,与@ppuskar建议的方式相同。