2014-09-20 115 views
1

我试图用分隔符(句号,分号和quesiton标记)将文本段落拆分为句子。我能想到的在Java中使用split()方法和由此产生的数组保存到一个ArrayList:将句子拆分为句子,并带有分隔符:句号,分号和问号

String[] sentencesByPeriod = passage.split("\\."); 
String[] sentencesBySemicolon = passage.split("\\;"); 
String[] sentencesByQuestionM = passage.split("\\?"); 

List<String> allSentences = new ArrayList<String>(); 
allSentences.addAll(Arrays.asList(sentencesByPeriod)); 
allSentences.addAll(Arrays.asList(sentencesBySemicolon)); 
allSentences.addAll(Arrays.asList(sentencesByQuestionM)); 

这工作,但我想知道是否有任何更有效的方式来做到这一点?谢谢

+0

是什么让你认为这是低效率的? – NPE 2014-09-20 16:26:25

+0

使用多个String数组并将它们推入ArrayList对我来说似乎非常多余。 – TonyGW 2014-09-20 16:28:49

回答

3

在一个正则表达式中,你可以这样做。

String s[] = passage.split("[.;?]"); 
List<String> allSentences = new ArrayList<String>(); 
allSenteces.addAll(Arrays.asList(s)); 

或者使用的StringTokenizer

StringTokenizer tokenizer = new StringTokenizer(passage, ".;?"); 
List<String> s = new ArrayList<String>(); 
while(tokenizer.hasMoreTokens()){ 
    s.add(tokenizer.nextToken()); 
} 
+0

这比我的简洁:)谢谢 – TonyGW 2014-09-21 20:39:49