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

确定字符串中的每个字符是否为字母的Java,java,Java,我使用isleter()和charAt()来查看str中的字符是否为字母。 此方法的用途是查找字符串中至少为最小字长的字数。我不想让它计算字母以外的任何东西。(我是爪哇岛的一个流浪汉) publicstaticintwordcount(stringstr,intminlength){ //计算字数的方法。 整数计数=0; 布尔值=假; for(inti=0,wordLength=0;i=minLength){ 计数++; } 字长=0; }否则{ 字长++; } } 返回计数; } 问题出在fo

我使用isleter()和charAt()来查看str中的字符是否为字母。 此方法的用途是查找字符串中至少为最小字长的字数。我不想让它计算字母以外的任何东西。(我是爪哇岛的一个流浪汉)

publicstaticintwordcount(stringstr,intminlength){
//计算字数的方法。
整数计数=0;
布尔值=假;
for(inti=0,wordLength=0;i=minLength){
计数++;
}
字长=0;
}否则{
字长++;
}
}
返回计数;
}

问题出在
for
循环中。你让它迭代直到
i
。这意味着在某个时刻,您将要求
str.charAct(str.length())
。因为Java数组(和字符串)从0开始索引,所以索引太高,将中断


相反,只要让你的
for
循环迭代到
i
。这应该可以解决问题。

不是
字符。Isleter
不工作,而是
str.charAt(i)
i
达到
str.length()
时引发异常

循环从
0
迭代到
str.length()
,共迭代
str.length()+1个
字符。当
i
str.length()
时,调用
charAt(i)
是非法的

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

for (int i = 0, wordLength = 0; i < str.length() + 1; i++) {
    if (i == str.length() || !Character.isLetter(str.charAt(i))) {
        ...
    }
}
for(inti=0,wordLength=0;i
在上面,当
i==str.length()
时,不会调用
str.charAt(i)
,以防止崩溃()

您可能还需要更改一些内容:

  • str.charAt(i)=''| | isLetter==false
    可以简化为
    isLetter==false
    ,甚至可以简化为
    !isLetter
    ,因为空格字符不是字母
  • isleter
    的声明可以在循环内部移动,并与初始化相结合(除非您决定使用上面所示的截取的代码完全删除变量)

胰岛检查对您不起作用怎么办?它用在一个复合谓词中,该谓词与一系列其他条件一起使用…它表示“线程中的异常”main“java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:4”代码现在在删除+1后运行,它仍然将标点作为一个单词计算,我能做什么?@javajavaBut它不为我计算标点(你可以看到我的修改)。@ JavajavaHut,欢迎!如果解决方案为你,请考虑通过点击旁边的灰色复选标记来接受答案。这会让其他人知道你的问题已经解决了,并在堆栈溢出上为你赢得了新徽章。
for (int i = 0, wordLength = 0; i < str.length() + 1; i++) {
    if (i == str.length() || !Character.isLetter(str.charAt(i))) {
        ...
    }
}