计算字符串中的单词 - 跳过双空格

时间:2012-09-30 09:20:42

标签: java string split words counting

我正在开发一个程序,用于计算在文本区域中键入或粘贴的单词。如果它没有双倍空格,它会正确计算单词。我为此使用split方法,并使用for循环对象来计算单词。

这是代码部分中最简单的形式,但却遇到了一些问题...


 public static void main(String[] args) {
    String string = "Java  C++ C#";
    String[] str;
    int c=0;
    str = string.split(" ");
    for(String s:str){
        if(s.equals(" "))
            System.out.println("skipped space");
        else{
            System.out.println("--"+s);
            c++;
        }
    }
    System.out.println("words; " + c);
}

我试图检查对象s中包含的字符串是否是空格,但是我这样做是不行的。

我希望它像这样输出

--Java
skipped space
--C++
--C#

字; 3

但结果是

--Java
--
--C++
--C#
words; 4

有关如何解决此问题的任何建议?或哪个部分我遇到了问题? 提前致谢。

3 个答案:

答案 0 :(得分:7)

split需要正则表达式。使用它的力量。

str = string.split(" +");

//more sophisticated
str = string.split("\\s+");
  • \s匹配任何空格(不仅仅是空格,还有标签。换行等)。
  • +表示“其中一个或多个”
  • 第二个反斜杠需要转义第二个以删除字符串
  • 中的特殊含义

答案 1 :(得分:2)

您需要将行if(s.equals(" "))更改为if(s.equals(""))(没有空格)。 原因是split给出了一个空格之间的数组,两个空格之间没有任何内容。

答案 2 :(得分:1)

当您从String.split获取空字符串时,可以使用String.equals检查返回数组中的字符串内容:

if (s.equals("")) {
...

输出:

--Java
skipped space
--C++
--C#