1

「web 2.0 ウィキペディア」の記事からテキストを抽出し、「文」に分割しました。その後、各文字列に 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();

ここに画像の説明を入力

ご覧のとおり、これはたった 1 つの文です。しかし、私はそれが5つの文を持っていると思っていました!

もう 1 つのことは、2 番目の文が別の場所から始まっていることです。ここで私はそれをどのように抽出したかToast

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

ここに画像の説明を入力

これは私には意味がありません!テキストを適切に文に分割し、Stringsそれぞれ 5 つの文を含むようにするにはどうすればよいですか?

4

4 に答える 4

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?

これは、ピリオドで終わらない 2 つのセンテンスであり、完全に間違った場所で分割された 5 つのセンテンスであるとコードに誤解させる可能性があるため、このアプローチは実際には問題をはらんでいます。ただし、文字列を分割する演習としては、他の方法と同じくらい良いと思います。

于 2013-10-16T07:48:04.847 に答える
2

". "に 追加 textArrayWithFullStop[i]

colelctionOfFiveSentences = colelctionOfFiveSentences + textArrayWithFullStop[i]+". ";
于 2013-10-16T07:29:53.607 に答える
1

副次的な問題(文の分割)の解決策として、この正規表現から始めることをお勧めします

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

そして、主な問題として、 copyOfRange()を使用できる可能性があります

于 2013-10-16T08:16:27.667 に答える