簡體   English   中英

檢查帶有indexOf的雙字母嗎?

[英]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位。 您可能想對StringtoUpperCase(int)進行處理以處理Unicode,請參見Oracle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM