Java确定字符串中的每个字符是否为字母

时间:2015-04-06 18:26:22

标签: java

我正在使用isLetter()和charAt()来查看str中的字符是否是字母。 使用此方法是查找字符串中至少为最小字长的字数。我不希望它除了字母之外还要算什么。 (我是一个java noob)

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;
}

2 个答案:

答案 0 :(得分:2)

问题出在你的for循环中。你有迭代直到i < str.length() + 1。这意味着在某些时候,你会要求str.charAct(str.length())。因为Java数组(和字符串)从0开始索引,所以索引太高而且会破坏。

相反,只需让for循环迭代到i < str.length()。那应该解决它。

答案 1 :(得分:2)

Character.isLetter无法正常工作,str.charAt(i)i到达str.length()时会引发异常。

您的循环将i0迭代到str.length(),包括总共str.length()+1个字符。 <{1}} charAt(i) istr.length()的来电是非法的。

要解决此问题,请从+ 1循环中的表达式中删除for,或确保在str.charAt(i)等于{{1}时未调用i }}。例如,您可以使用如下的短路功能:

str.length()

以上,for (int i = 0, wordLength = 0; i < str.length() + 1; i++) { if (i == str.length() || !Character.isLetter(str.charAt(i))) { ... } } 时未调用str.charAt(i),以防止崩溃(demo)。

您可能想要更改一些内容:

  • i == str.length()可以缩减为str.charAt(i) == ' ' || isLetter==false甚至缩小为isLetter==false,因为空格字符不是字母
  • !isLetter的声明可以在循环中移动,并与初始化相结合(除非您决定使用上面显示的代码剪切完全删除变量)。