我需要检查一个单词中是否有多个相同的字母。
例如,在名称'bob'中,'b'的索引是'0和2',但indexOf只创建一个看到第一个索引为0.
我需要的是检查然后跳过0然后继续工作并检查更多相同的字母。这是我到目前为止所拥有的。
String wordNow = "bob";
letterGuess = console.next().toUpperCase();
letterIndex = wordNow.indexOf(letterGuess);
System.out.println(letterIndex);
输出:0
如果有人有一个很好的有效方法,我会全力以赴。
答案 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位。您可能希望围绕String
或toUpperCase(int)
执行某些操作来处理Unicode,请参阅Oracle。