2011-06-29 55 views
2

每个段落的第一句我有一个文本文件,并希望打印第一一句每一段的。段落以换行符分隔,即“\ n”。打印在Java中

从的BreakIterator,我以为我可以使用getLineInstance()对于这一点,但现在看来,这是迭代器在每个字:

public String[] extractFirstSentences() { 
    BreakIterator boundary = BreakIterator.getLineInstance(Locale.US); 
    boundary.setText(getText()); 

    List<String> sentences = new ArrayList<String>(); 
    int start = boundary.first(); 
    int end = boundary.next(); 
    while (end != BreakIterator.DONE) { 
     String sentence = getText().substring(start, end).trim(); 
     if (!sentence.isEmpty()) { 
      sentences.add(sentence); 
     } 
     start = end; 
     end = boundary.next(); 
    } 

    return sentences.toArray(new String[sentences.size()]); 

我使用getLineInstance()不正确或有另一种方法做我想要的是?

+1

什么构成 “一句”?它会如何处理像“布朗博士是否会加入我们?” –

+1

你不想使用'getSentenceIterator'吗? –

+0

由BreakIterator.getSentenceInstance()定义,不知道它是如何实现的,我假设它正在使用一个句点,后面至少有一个空格作为分隔符。 – wolve80

回答

2

这个怎么样作为替代:

public String[] extractFirstSentences() { 
    String myText = getText(); 
    String[] paragraphs = myText.split("\\n"); 
    List<String> result = new ArrayList<String>(); 
    for (String paragraph : paragraphs) { 
     result.add(paragraph.split("[\\.\\?\\!][\\r\\n\\t ]+")[0] + "."); 
    } 

    return result.toArray(new String[result.size()]); 
} 
+0

谢谢,我想我必须走这条路。 getLineInstance()仍然没有按预期工作,或者我没有正确应用它,但仍然有点失望。 – wolve80

+1

如果这个答案适合你,请阅读[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 – Nightfirecat

+1

@Nightfirecat:有点厚颜无耻,在OP表示他不完全满意后。 –