我似乎无法弄清楚为什么这不起作用,但我可能错过了一些简单的逻辑。当它后面没有空格时,该方法似乎没有找到最后一个单词,所以我猜测i ==self.length()-1有问题,但在我看来它会返回真正;你是最后一个角色而不是空白。
public void numWords()
{
int numWords = 0;
for (int i = 1; i <= itself.length()-1; i ++)
{
if (( i == (itself.length() - 1) || itself.charAt (i) <= ' ') && itself.charAt(i-1) > ' ')
numWords ++;
}
System.out.println(numWords);
}
本身就是字符串。我按照我的方式比较角色,因为它是如何在书中显示的,但如果有更好的方法,请告诉我。
答案 0 :(得分:1)
天真的方法:将所有有空格的东西视为一个单词。有了它,只需将元素数量计算为String#split
操作的结果。
public int numWords(String sentence) {
if(null != sentence) {
return sentence.split("\\s").length;
} else {
return 0;
}
}
答案 1 :(得分:0)
尝试,
int numWords = (itself==null) ? 0 : itself.split("\\s+").length;
答案 2 :(得分:0)
所以基本上看起来你正试图用它来计算一个字符串中的所有空白块。我将修复你的代码并使用我的头编译器来帮助你解决你遇到的问题。
public void numWords()
{
int numWords = 0;
// Don't check the last character as it doesn't matter if it's ' '
for (int i = 1; i < itself.length() - 1; i++)
{
// If the char is space and the next one isn't, count a new word
if (itself.charAt(i) == ' ' && itself.charAt(i - 1) != ' ') {
numWords++;
}
}
System.out.println(numWords);
}
这是一个非常天真的算法,在少数情况下失败,如果字符串以多个空格结尾,例如'hello world '
,则会计算3个字。
请注意,如果我要实现这样的方法,我会使用类似于Makoto的答案的正则表达式方法来简化代码。
答案 3 :(得分:0)
以下代码片段可以更好地完成工作:
if(sentence == null) {
return 0;
}
sentence = sentence.trim();
if ("".equals(sentence)) {
return 0;
}
return sentence.split("\\s+").length;
\\s+
在多个空格的情况下正常工作。 trim()