[英]Check for double letters with indexOf?
我需要檢查一個單詞中是否有多個相同的字母。
例如,在名稱“ bob”中,“ b”的索引是“ 0和2”,但indexOf僅創建一個看到第一個索引0。
我需要的是檢查它,然后跳過0並繼續進行下去,並檢查更多相同的字母。 這是我到目前為止所擁有的。
String wordNow = "bob";
letterGuess = console.next().toUpperCase();
letterIndex = wordNow.indexOf(letterGuess);
System.out.println(letterIndex);
輸出:0
如果有人能做到這一點,我很高興。
您可以為此使用String.lastIndexOf
。 由於兩個函數都將返回-1(如果未找到),因此要檢查是否有多個實例,您可以比較這些值
return wordNow.indexOf(letterGuess) != wordNow.lastIndexOf(letterGuess);
方法indexOf有多種版本。 其中之一本身就是索引! 只需仔細閱讀字符串類的javadoc。 您會看到甚至有一個叫做“ lastIndexOf”的東西真的很方便。
例如,您可以使用它來查看在找到的第一個索引“后面”是否還有其他字符出現。
無論如何:真正的答案是您應該廣泛學習類的文檔。
您可以通過排除匹配字符來使用子字符串,如下所示:
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);
}
最有效的方法是只搜索您要查找的元素(假設在輸入字符串上沒有順序或分布)。
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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.