解析句子远远不是一个微不足道的任务,即使是拉丁语言,如英语。像你在问题中概述的那样一个天真的方法将会失败,这在实践中将无济于事。
更好的方法是使用配置了正确的区域设置的BreakIterator。
BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
String source = "This is a test. This is a T.L.A. test. Now with a Dr. in it.";
iterator.setText(source);
int start = iterator.first();
for (int end = iterator.next();
end != BreakIterator.DONE;
start = end, end = iterator.next()) {
System.out.println(source.substring(start,end));
}
产生以下结果:
>这是一个测试。>这是一个T.L.A.测试。>现在有一个博士在里面。