查找字符串中的单词数

时间:2014-01-28 18:17:01

标签: java

我似乎无法弄清楚为什么这不起作用,但我可能错过了一些简单的逻辑。当它后面没有空格时,该方法似乎没有找到最后一个单词,所以我猜测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);
}

本身就是字符串。我按照我的方式比较角色,因为它是如何在书中显示的,但如果有更好的方法,请告诉我。

4 个答案:

答案 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()
  • 删除trailng和前导空格附加空行检查
  • 阻止结果1为空字符串。