【问题标题】:counting words in string - skipping double space计算字符串中的单词 - 跳过双倍空格
【发布时间】:2012-09-21 12:37:56
【问题描述】:

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

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

【问题讨论】:

    标签: java string split words counting


    【解决方案1】:

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

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

    【讨论】:

    • 感谢它的工作。如果你不介意的话,我能问你“\\s+”中的+是做什么的吗?
    • 好像你找到了。我不知道这是否是真实的名字。也许只是计票。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      输出:

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

      【讨论】:

      • 它适用于个人Strings 本身。 String.split 总是产生一个 String 数组。
      猜你喜欢
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 2023-03-21
      相关资源
      最近更新 更多