1

我从“web 2.0 wikipedia”文章中提取了文本,并将其拆分为“句子”。之后,我将创建“字符串”,每个字符串包含 5 个句子。

提取后,文本如下所示,在EditText

在此处输入图像描述

下面是我的代码

finalText = textField.getText().toString();

String[] textArrayWithFullStop = finalText.split("\\. ");
String colelctionOfFiveSentences = "";

List<String>textCollection = new ArrayList<String>();
for(int i=0;i<textArrayWithFullStop.length;i++)
{
    colelctionOfFiveSentences = colelctionOfFiveSentences +        textArrayWithFullStop[i];
    if( (i%5==0) )
    {
        textCollection.add(colelctionOfFiveSentences);
        colelctionOfFiveSentences = "";
    }
 }

但是,当我使用Toast来显示文本时,这里给出了什么

Toast.makeText(Talk.this, textCollection.get(0), Toast.LENGTH_LONG).show();

在此处输入图像描述

如您所见,这只是一句话!但我希望它有5个句子!

另一件事是,第二句话是从其他地方开始的。这是我如何将其提取到Toast

Toast.makeText(Talk.this, textCollection.get(1), Toast.LENGTH_LONG).show();

在此处输入图像描述

这对我来说毫无意义!如何正确地将文本拆分为句子,并创建Strings每个包含 5 个句子的句子?

4

4 回答 4

2

问题是对于第一句话,0 % 5 = 0,所以它被立即添加到数组列表中。您应该使用另一个计数器而不是 mod。

finalText = textField.getText().toString();

String[] textArrayWithFullStop = finalText.split("\\. ");
String colelctionOfFiveSentences = "";
int sentenceAdded = 0;

List<String>textCollection = new ArrayList<String>();
for(int i=0;i<textArrayWithFullStop.length;i++)
{
    colelctionOfFiveSentences += textArrayWithFullStop[i] + ". ";
    sentenceAdded++;
    if(sentenceAdded == 5)
    {
        textCollection.add(colelctionOfFiveSentences);
        colelctionOfFiveSentences = "";
        sentenceAdded = 0;
    }
 }
于 2013-10-16T07:41:28.580 回答
2

add ". " to textArrayWithFullStop[i]

colelctionOfFiveSentences = colelctionOfFiveSentences + textArrayWithFullStop[i]+". ";
于 2013-10-16T07:29:53.607 回答
2

我相信,如果您将 mod 行修改为:

if(i%5==4)

你会得到你需要的。

您可能已经意识到这一点,但还有其他原因可能会导致某人使用“.”,例如,它实际上并没有结束一个句子

I spoke to John and he said... "I went to the store. 
Then I went to the Tennis courts.", 
and I don't believe he was telling the truth because 
1. Why would someone go to play tennis after going to the store and 
2. John has no legs!  
I had to ask, am I going to let him get away with these lies?

那是两个不以句点结尾的句子,并且会误导您的代码认为它是在完全错误的地方分解的 5 个句子,因此这种方法确实充满了问题。但是,作为拆分字符串的练习,我想它和其他任何练习一样好。

于 2013-10-16T07:48:04.847 回答
1

作为一个附带问题(拆分句子)解决方案,我建议从这个正则表达式开始

string.split(".(\\[[0-9\\[\\]]+\\])? ")

对于主要问题,您可以使用copyOfRange()

于 2013-10-16T08:16:27.667 回答