-1

我的 android 代码有问题。我的这段代码的目标是读取文本文件的每一行以匹配静态字符串,我还需要显示所有匹配的问题。我的静态输入字符串是“你的出生日期是什么”,并且还有一个文本(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

You are facing here ArrayIndexOutOfBoundsException because you still have somewhere white space in your comparision

replace

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

with

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

看起来问题出在您身上,for(i=1; messages[i].trim() ...因为i有时会大于或等于messages数组的长度。为了解决,您应该将代码更改为:

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()在一个null实例上做,你会得到一个NullPointerException.

  • !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 回答