-1

Androidコードに問題があります。静的文字列と一致するようにテキストファイルの各行を読み取るというこのコードの目的も、一致したすべての質問を表示する必要があります。私の静的入力文字列は「あなたの生年月日は何ですか」であり、アセットフォルダにすべての質問があるtext(fms.txt)ファイルもあります。それから私はこのコードをコンパイルしました。エラーのある出力が得られました。

私のコード

try {
    ins = this.getAssets().open("fms.txt");
    reader = new BufferedReader(new InputStreamReader(ins));
    line = reader.readLine();
    message = "What is your DOB";
    messages = message.split(" ");
    int i = 0, j = 0, inc = 1, oldin = 0;
    while (line != null) {
        lines = line.split("#");
        words = lines[0].split(" ");
        if (words[0].trim().equals(messages[0].trim())) {
            for(i = 1; messages[i].trim() != null; i++) {
                Log.e(TAG, "----------::::"+messages[i].trim());
                oldin = inc;
            }
        }
        line = reader.readLine();
    }
    ins.close();
    Log.e(TAG, "---------FMSG : "+finalmsg);
} catch(IOException e1) {
    e.printStackTrace();
}

ここに画像の説明を入力してください

4

2 に答える 2

0

配列の長さ以上になることがあるfor(i=1; messages[i].trim() ...ため、問題が発生しているようです。解決するには、コードを次のように変更する必要があります。imessages

for (i = 1; i < messages.length && messages[i] != null &&
            !messages[i].trim().isEmpty(); i++) {
    //your business logic...
}

変更の説明:

  • i < messages.length:これは最初のルールでなければなりません。Javaは左から右に評価することに注意してください。配列を反復処理するときは、最初にインデックスが配列サイズよりも小さいかどうかを確認する必要があります。

  • messages[i] != null:次に、配列要素がと異なることを確認しnullます。インスタンスを実行すると、が取得されmessages[i].trim()ます。nullNullPointerException

  • !messages[i].trim().isEmpty():最後に、要素にアクセスでき、この要素がアクセスできないことがわかったらnull、先頭のスペースをトリミングして、Stringが空でないかどうかを確認できます。

このエラーはAndroidアプリケーションのエラーではなく、Javaの間違ったコーディングであることに注意してください。

さらなる改訂では、空であっても、存在するmessages[i]ことを心配する必要はありません。nullあなたのコードは

for (i = 1; i < messages.length; i++) {
    //your business logic...
}

ちなみに、次回はコードの画像を投稿せず、質問に書き込んでください。コードのフォーマット方法がわからなくても心配しないでください。他の誰かが質問を編集してあなたに手を差し伸べます。スタックトレースについても同じアドバイス。

于 2013-02-09T06:50:03.997 に答える
0

比較にまだ空白があるため、ここでArrayIndexOutOfBoundsExceptionに直面しています。

交換

for(i=1; messages[i] != null, i++)

for(i = 1; i < messages.length && messages[i] != null && !messages[i].trim().isEmpty(); i++) 
于 2013-02-09T06:55:13.827 に答える