【问题标题】:Java useDelimiter issueJava useDelimiter 问题
【发布时间】:2014-02-22 01:14:35
【问题描述】:

我正在做一项作业,要求我阅读一个句子的文本文件。在此之后,我尝试使用指定的分隔符来限制传入的内容并将其放入数组中。

scannerInput.useDelimiter("\\p{Punct}|\\p{Digit}|\\p{javaWhitespace}");

我的问题是,当我读入文本文件并将单词放入数组时,数组中的索引之间似乎有很大的空白。

例如,数组的输出如下所示:

array[0] = 
array[1] = tony
array[2] =
array[3] = sue

我假设我的分隔符列表中缺少一些格式字符或其他字符。我想知道我缺少什么来删除所有额外的空格,以便我可以只拥有数组中的单词。到目前为止,我的前 30 个索引基本上是空白的。

或者,如果有一种简单的方法可以找出看似空白的内容背后的真正内容。我认为它不仅仅是空的。感谢您的帮助。

【问题讨论】:

    标签: java regex arrays


    【解决方案1】:

    您的分隔符是单个字符,也许您需要指定多个字符:

    scannerInput.useDelimiter("\\p{Punct}+|\\p{Digit}+|\\p{javaWhitespace}+")
    

    并且,如果每个之间可能有多个 类型 分隔符(不是 just 空格或 just 数字),则将其更改为@David Ehrmann 建议的正则表达式。

    【讨论】:

      【解决方案2】:

      试试:

      scannerInput.useDelimiter("[\\p{Punct}\\p{Digit}\\p{javaWhitespace}]+")
      

      它将吞噬连续的分隔符。我还从交替切换到字符类,因为您只匹配单个字符 \p{Punct} 本身就是一个字符类,并且它们比具有交替的组匹配得更快。

      【讨论】:

      • 这主要解决了我的问题。现在唯一的问题是像 Steven's 这样的词被分解成 steven 和 s 作为下一个词。我将阅读更多内容并尝试找出最好的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2019-03-30
      相关资源
      最近更新 更多