![](/img/trans.png)
[英]Check if each letter in ArrayList<String> is a certain character?
[英]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)
引發異常。
您的循環將i
從0
迭代到str.length()
(包括str.length()
-總共str.length()+1
字符。 當i
為str.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.