4

我正在开发一个程序,该程序将计算在文本区域中键入或粘贴的单词。如果没有双空格,它会正确计算单词。我为此使用 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

关于如何解决这个问题的任何建议?或者我哪部分有问题?提前致谢。

4

3 回答 3

7

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

str = string.split(" +");

//more sophisticated
str = string.split("\\s+");
  • \s匹配任何空格(不仅仅是空格,还有制表符、换行符等)
  • +意思是“其中一个或多个”
  • 需要第一个反斜杠来转义第二个以删除字符串中的特殊含义
于 2012-09-30T09:25:00.960 回答
2

您需要将行更改if(s.equals(" "))if(s.equals(""))(没有空格)。原因是它split为您提供了一个数组,其中包含空格之间的内容,并且两个空格之间没有任何内容。

于 2012-09-30T09:25:36.293 回答
1

当您从 得到一个空字符串时String.split,您可以String.equals用来检查返回数组中的字符串内容:

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

输出:

--Java
skipped space
--C++
--C#
于 2012-09-30T09:25:13.077 回答