簡體   English   中英

Java確定字符串中的每個字符是否為字母

[英]Java determining if each character in a string is a letter

我正在使用isLetter()和charAt()來查看str中的字符是否是字母。 此方法的用途是查找字符串中至少等於最小單詞長度的單詞數。 除了字母,我不希望它計數任何其他東西。 (我是Java菜鳥)

public static int wordCount(String str, int minLength) {     
//Method that counts words.

    int count = 0;
    boolean isLetter = false;
    for (int i = 0, wordLength = 0; i < str.length() + 1; i++) {
        isLetter = Character.isLetter(str.charAt(i)); //Why doesn't this line work?
        if (i == str.length() || str.charAt(i) == ' ' || isLetter==false) { 
            if (wordLength >= minLength) {              
                count++;                                                
            }
            wordLength = 0;                                 
        } else {                                                            
            wordLength++;                                       
        }
    }
    return count;
}

問題出在您的for循環中。 您需要迭代直到i < str.length() + 1為止。 這意味着在某個時候,您會要求提供str.charAct(str.length()) 因為Java數組(和字符串)的索引從0開始,所以索引太高並且會中斷。

相反,只需讓for循環迭代直到i < str.length() 那應該解決它。

不是Character.isLetter無法正常工作,而是當i達到str.length()時, str.charAt(i)引發異常。

您的循環將i0迭代到str.length() (包括str.length() -總共str.length()+1字符。 istr.length()時,調用charAt(i) str.length()將是非法的。

要解決此問題,請從for循環的表達式中刪除+ 1 ,或確保當i等於str.length()時不調用str.charAt(i) str.length() 例如,您可以使用以下短路功能:

for (int i = 0, wordLength = 0; i < str.length() + 1; i++) {
    if (i == str.length() || !Character.isLetter(str.charAt(i))) {
        ...
    }
}

上面,當i == str.length()時不調用str.charAt(i) ,以防止崩潰( demo )。

您可能需要更改一些其他內容:

  • str.charAt(i) == ' ' || isLetter==false str.charAt(i) == ' ' || isLetter==false可以簡化為isLetter==false甚至可以簡化為!isLetter ,因為空格字符不是字母
  • 可以在循環內移動isLetter的聲明,並將其與初始化結合使用(除非您決定使用上面顯示的代碼完全isLetter該變量)。

暫無
暫無

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

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