Java 如何将一个字符串拆分为字符串句子?

Java 如何将一个字符串拆分为字符串句子?,java,string,sentence,Java,String,Sentence,对于我的一个项目,我需要把段落分成句子。我已经发现,您可以使用以下代码将段落分成不同的句子,然后打印出来: BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US); iterator.setText(content); int start = iterator.first(); for (int end = iterator.next(); end != BreakIterator.DONE; s

对于我的一个项目,我需要把段落分成句子。我已经发现,您可以使用以下代码将段落分成不同的句子,然后打印出来:

BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
iterator.setText(content);
int start = iterator.first();
for (int end = iterator.next();
    end != BreakIterator.DONE;
    start = end, end = iterator.next()) {
System.out.println(content.substring(start,end));
其中变量“content”是预定义变量

但是,我想把分解后的句子变成字符串,这样我就可以继续使用它们了

我该怎么做?我认为这可能与字符串数组有关。
谢谢您的帮助。

我从未使用过
BreakIterator
,我想您需要它用于区域设置(仅供参考:和)。无论哪种方式,您都可以将句子保存在数组或
列表中,如您所述

BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
iterator.setText(content);
int start = iterator.first();

List<String> sentences = new ArrayList<String>();
for (int end = iterator.next(); end != BreakIterator.DONE; start = end, end = iterator.next()) {
    //System.out.println(content.substring(start,end));
    sentences.add(content.substring(start,end));
}
BreakIterator iterator=BreakIterator.getSentenceInstance(Locale.US);
iterator.setText(内容);
int start=iterator.first();
列出句子=新建ArrayList();
for(int end=iterator.next();end!=BreakIterator.DONE;start=end,end=iterator.next()){
//System.out.println(content.substring(start,end));
添加(content.substring(start,end));
}

试试我从中得到的

publicstaticvoidmain(字符串[]args){
字符串内容=
“行边界分析确定文本的位置”+
“换行时可能会断开字符串。该”+
“机制正确处理标点符号和”+
“连字号。实际换行需要”+
“也考虑可用的线宽和”+“。
“由高级软件处理。”;
中断迭代器迭代器=
BreakIterator.getSentenceInstance(Locale.US);
Arraylist语句=计数(迭代器,内容);
}
私有静态Arraylist计数(BreakIterator bi,字符串源){
int计数器=0;
bi.setText(来源);
int lastIndex=bi.first();
Arraylist contents=新的Arraylist();
while(lastIndex!=BreakIterator.DONE){
int firstIndex=lastIndex;
lastIndex=bi.next();
if(lastIndex!=BreakIterator.DONE){
String语句=source.substring(firstIndex,lastIndex);
System.out.println(“句子=”+句子);
增加(句子);
计数器++;
}
}
返回内容;
}

为什么不使用.split()、传递相应的分隔符并以字符串[]形式接收所有句子?@TJ-我没有使用.split(),因为我觉得它无法正确分割段落。例如,如果我按时段分割,那么2014年8月8日等日期将被分割,即使它不是一个句子。或者,如果我除以一个句点,然后是一个大写字母,那么Johnson先生就会被拆分。实际上现在我想起来了,使用BreakIterator在名字上也有同样的问题。你认为有办法解决这个问题吗?是的,String.split(String regex)-支持使用regex进行拆分。想出一个好的正则表达式来满足你的需要。从我所看到的情况来看,会有很多情况。我对该代码的唯一问题是,它基本上与我的代码相同,因为无法区分句子字符串。有没有办法将字符串设置为sentence1、sentence2、sentence3等?在我的代码中,我在方法count中使用了字符串类型的Arraylist并存储所有句子并返回Arraylist。最后你有一个ArrayList,它包含了句子1,句子2,句子3等等,如果你还不清楚,请告诉我。哦,对不起,我没有注意到ArrayList:/。很抱歉。我将尝试这段代码,看看它是否适合我。我对Arraylist有一个小问题。当我使用“System.out.println(contents.get(1))”打印存储在索引1中的句子时,我得到一个错误java.lang.IndexOutOfBoundsException(Arraylist的大小只有1)。当我访问索引0时,它会将第一个句子打印5次。你知道代码有什么问题吗?这是因为内容有简单的字符串,要检查它是否正确,请创建一个文本文件,插入一些有段落的句子,阅读相同的内容并分配给内容。很抱歉,我之前没有回复,但这对我来说很有效!谢谢
public static void main(String[] args) {
    String content =
            "Line boundary analysis determines where a text " +
            "string can be broken when line-wrapping. The " +
            "mechanism correctly handles punctuation and " +
            "hyphenated words. Actual line breaking needs to " +
            "also consider the available line width and is " +
            "handled by higher-level software. ";

    BreakIterator iterator =
            BreakIterator.getSentenceInstance(Locale.US);

    Arraylist<String> sentences = count(iterator, content);

}

private static Arraylist<String> count(BreakIterator bi, String source) {
    int counter = 0;
    bi.setText(source);

    int lastIndex = bi.first();
    Arraylist<String> contents = new ArrayList<>(); 
    while (lastIndex != BreakIterator.DONE) {
        int firstIndex = lastIndex;
        lastIndex = bi.next();

        if (lastIndex != BreakIterator.DONE) {
            String sentence = source.substring(firstIndex, lastIndex);
            System.out.println("sentence = " + sentence);
            contents.add(sentence);
            counter++;
        }
    }
    return contents;
}