![](/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.