java – 将段落拆分为单个句子.我在这里覆盖了所有的基地吗?

前端之家收集整理的这篇文章主要介绍了java – 将段落拆分为单个句子.我在这里覆盖了所有的基地吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将包含多个句子的字符串拆分为单个句子的字符串数组.

这是我到目前为止所拥有的,

String input = "Hello World. " 
             + "Today in the U.S.A.,it is a nice day! "
             + "Hurrah!"
             + "Here it comes... "
             + "Party time!";
String array[] = input.split("(?<=[.?!])\\s+(?=[\\D\\d])");

这段代码工作得非常好.我明白了

Hello World.
Today in the U.S.A.,it is a nice day!
Hurrah!
Here it comes...
Party time!

我使用lookbehind功能来查看结束标点符号的句子是否在某个或一个空格之前.如果是这样,我们分手了.

但是这个正则表达式没有涵盖一些例外.例如,
美国是一个伟大的国家,错误地分裂为美国,是一个伟大的国家.

关于如何解决这个问题的任何想法?

而且,我在这里错过了任何边缘案例吗?

解决方法

如果您不必使用正则表达式,则可以使用Java的内置 BreakIterator.

以下代码显示了解析句子的示例,但BreakIterator支持其他形式的解析(word,line等).如果您处理不同的语言,也可以选择传入不同的语言环境.此示例使用默认语言环境.

String input = "Hello World. " 
    + "Today in the U.S.A.,it is a nice day! "
    + "Hurrah!"
    + "The U.S. is a great country. "
    + "Here it comes... "
    + "Party time!";
BreakIterator iterator = BreakIterator.getSentenceInstance();
iterator.setText(input);
int start = iterator.first();
for (int end = iterator.next(); end != BreakIterator.DONE; start = end,end = iterator.next()) {
    System.out.println(input.substring(start,end));
}

这导致以下输出

Hello World. 
Today in the U.S.A.,it is a nice day! 
Hurrah!
The U.S. is a great country. 
Here it comes... 
Party time!

猜你在找的Java相关文章