检查indexOf的双字母?

时间:2017-03-11 08:37:38

标签: java

我需要检查一个单词中是否有多个相同的字母。

例如,在名称'bob'中,'b'的索引是'0和2',但indexOf只创建一个看到第一个索引为0.

我需要的是检查然后跳过0然后继续工作并检查更多相同的字母。这是我到目前为止所拥有的。

String wordNow = "bob";
letterGuess = console.next().toUpperCase();

letterIndex = wordNow.indexOf(letterGuess);
System.out.println(letterIndex);

输出:0

如果有人有一个很好的有效方法,我会全力以赴。

4 个答案:

答案 0 :(得分:4)

您可以使用String.lastIndexOf。由于两个函数都会返回-1(如果没有找到),那么为了检查是否有多个实例,你可以只比较这些值

return wordNow.indexOf(letterGuess) != wordNow.lastIndexOf(letterGuess);

答案 1 :(得分:1)

方法indexOf有多个版本。其中一个本身就是一个索引!只需仔细阅读字符串类的javadoc即可。你看,甚至有一个名为“lastIndexOf”的东西真的很方便。

例如,您可以使用它来查看是否在您找到的第一个索引“后面”出现了其他字符。

无论如何:这里真正的答案是你应该广泛研究课程的文档。

答案 2 :(得分:0)

您可以通过排除匹配字符来使用子字符串,如下所示:

String wordNow = "bob";
letterGuess = console.next().toUpperCase();

letterIndex = wordNow.indexOf(letterGuess);
System.out.println(letterIndex);

if(letterIndex >= 0) {
   int secondIndex = wordNow.subString(letterIndex+1).indexOf(letterGuess);
   System.out.println(secondIndex);
}

答案 3 :(得分:0)

最有效的方法是只搜索您要查找的元素(假设输入字符串没有顺序或分布)。

public boolean isCharacterRepeatedIgnoreCase(String inputString, Character c) {
    int numFound = 0;
    final Character chUpper = Character.toUpperCase(c);
    final String upperCaseString = inputString.toUpperCase();
    for (int i=0;i<upperCaseString.length();++i) {
        if (upperCaseString.charAt(i) == chUpper) {
            numFound++;
        }
        if (numFound > 1) {
            return true;
        }
   }
   return false;
}

注意,我没有运行上面的代码。因此,如果您打算考虑上述情况,请编写适当的单元测试。另外,我假设你的角色可以适合16位。您可能希望围绕StringtoUpperCase(int)执行某些操作来处理Unicode,请参阅Oracle