Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java useDelimiter问题_Java_Regex_Arrays - Fatal编程技术网

Java useDelimiter问题

Java useDelimiter问题,java,regex,arrays,Java,Regex,Arrays,我正在做一项作业,要求我阅读一个包含句子的文本文件。在此之后,我尝试使用指定的分隔符来限制传入的内容,并将其放入数组中 scannerInput.useDelimiter("\\p{Punct}|\\p{Digit}|\\p{javaWhitespace}"); 我的问题是,当我读入文本文件并将单词放入数组时,数组中的索引之间有很大的空白 例如,数组的输出如下所示: array[0] = array[1] = tony array[2] = array[3] = sue 我假设在分隔符列表

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

scannerInput.useDelimiter("\\p{Punct}|\\p{Digit}|\\p{javaWhitespace}");
我的问题是,当我读入文本文件并将单词放入数组时,数组中的索引之间有很大的空白

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

array[0] = 
array[1] = tony
array[2] =
array[3] = sue
我假设在分隔符列表中缺少一些格式字符或其他字符。我想知道我遗漏了什么来删除所有额外的空白,这样我就可以只保留数组中的单词。到目前为止,我的前30个索引基本上是空白的


或者,如果有一种简单的方法来找出空白背后的真正含义。我想它不仅仅是空的。感谢您的帮助。

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

scannerInput.useDelimiter("\\p{Punct}+|\\p{Digit}+|\\p{javaWhitespace}+")
而且,如果每个分隔符之间可能有多种类型的分隔符(不仅仅是空格或数字),则按照@David Ehrmann的建议将其更改为正则表达式。

尝试:

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

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

这基本上解决了我的问题。现在唯一的问题是,像史蒂文这样的词被分成史蒂文和s作为下一个词。我将读更多的书,并试图找出最好的方法。