【问题标题】:Punctuation and the .next() method标点符号和 .next() 方法
【发布时间】:2011-08-11 23:47:12
【问题描述】:

有谁知道 Scanner 的 .next() 方法如何处理标点符号?我在任何地方都找不到这个问题的答案。我有一个程序从文本文件中读取每个单词,但我不确定它如何处理“那是”或“它们是”或“她”等部分。

对于句点和逗号,它们是否被视为一个单独的实体,或者如果它像“她”一样出现,它们是否被视为单词的一部分。还是她,”?根据它的作用,是“她”和“她”。还是“她”和“她”被扫描仪视为两个不同的词?

对于撇号,它们是否被考虑在内,或者它们是否有效地将单词一分为二?例如,“they're”会被识别为“they”“'”“re”还是会被完全识别为“they're”?

我希望我清楚地了解了这个问题。

【问题讨论】:

  • 扫描仪没有标点符号。但它有分隔符。

标签: java file next punctuation java.util.scanner


【解决方案1】:

扫描仪有一个useDelimiter 方法,可让您指定哪些字符将被视为“分词器”。默认分隔符是空格模式(因此标点符号将包含在单词中)

【讨论】:

    【解决方案2】:

    Scanner 的默认分隔符是空格。因此,您提供的所有示例都不会被拆分。为什么不自己尝试一下呢?

    String input = "That's a they are, her. They're here.";
    Scanner scanner = new Scanner(input);
    while (scanner.hasNext()) {
        System.out.println(scanner.next());
    }
    

    如果您确实想要拆分 ' 和空格之类的内容,您可以使用以下内容:

    Scanner scanner = new Scanner(input).useDelimiter("[\\s']");
    

    【讨论】:

      【解决方案3】:

      我不知道(只是猜测),所以我自己尝试了一下:

          String input = "That's what they are, I told her. She said, it ain't so!";
          Scanner s = new Scanner(input); // default delimiter is whitespaces
      
          while (s.hasNext()) {
              System.out.println(s.next());
          }
      

      输出:

      That's
      what
      they
      are,
      I
      told
      her.
      She
      said,
      it
      ain't
      so!
      

      【讨论】:

      • 感谢您的输出。就像我在另一条评论中所说的那样,我想我真的应该先自己尝试一下! :)
      猜你喜欢
      • 2021-02-28
      • 1970-01-01
      • 2020-03-27
      • 2011-06-13
      • 2015-02-21
      • 2010-09-20
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      相关资源
      最近更新 更多