【问题标题】:Check if each letter in ArrayList<String> is a certain character?检查 ArrayList<String> 中的每个字母是否是某个字符?
【发布时间】:2015-02-06 04:30:47
【问题描述】:

首先,我是 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 处的匹配项

任何想法如何去做这件事?谢谢。

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

【问题讨论】:

  • 那么,StringBuilder#indexOf 是不可能的?
  • 你根本不明白chosenWord.indexOf(chosenLetter, i)做了什么。
  • 你为什么不直接做 StringBuilder.toString().equals()?看起来在幕后它会非常相似并且可能不太容易出错......

标签: java for-loop arraylist character stringbuilder


【解决方案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);
    }
    }

这将打印您想要的输出

【讨论】:

  • 我想你需要努力得到不区分大小写的部分。因为它只会匹配“c”而不是“C”,反之亦然。
【解决方案2】:

你可以使用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 AND 6

您第一次尝试的基本问题是您实际上忽略了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

你实际上不需要外循环,你只需要一直循环直到indexOf&lt; 0,如上所示...

【讨论】:

  • 如果你也解释一下这个问题,我很乐意投票给你
  • @KickButtowski 我希望忽略它,检查更新,看看是否有意义......
【解决方案3】:

您看到该输出的原因是因为indexOf 将为i = 06i 返回0 = 17。在所有这些情况下,返回都不同于满足if 语句的-1。考虑使用charAt,就像@ppuskar 建议的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多