2011-06-29 167 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表示他不完全滿意後。 –