检查ArrayList <string>中的每个字母是否都是某个字符?</string>

时间:2015-02-06 04:30:48

标签: java for-loop arraylist character stringbuilder

首先,我是Stackoverflow的新手(所以请原谅我的丑陋格式),并且只有几年的编程经验(总共约6个编程类)

我正在做一个刽子手项目。我选择使用StringBuilder作为其中的一部分。例如,我想检查char chosenLetter = 'C'StringBuilder chosenWord = new StringBuilder("Ceramics");

中的索引或索引

理想情况下,我会有一个for循环来浏览StringBuilder字“Ceramics”并告诉我索引07。我完全搞不清楚。我已尝试使用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的匹配

任何想法如何去做?感谢。

再次,抱歉丑陋的格式。如果对澄清有任何疑问,我很乐意尝试澄清!

3 个答案:

答案 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++;
}

还应该注意,这是一个区分大小写的搜索,正如您所看到的,我已将文本全部小写,因此我可以捕获位置06

您第一次尝试的基本问题是您实际上忽略了indexOf

的结果
if (chosenWord.indexOf(chosenLetter, i) != -1) {
    System.out.println("This should be a match at index " + i);

但是然后打印i,所以在每次迭代中,您得到06的结果,因此它打印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而i1 = {{1}到7。在所有这些情况下,返回值与-1不同,后者满足if语句。考虑使用indexOf,与@ppuskar建议的方式相同。