我的Android代码中存在问题。我的目标是读取文本文件的每一行以匹配静态字符串,我还需要显示所有匹配的问题。 我的静态输入字符串是“你的DOB是什么”,还有一个文本(fms.txt)文件,其中包含assets文件夹中的所有问题。然后我编译了这段代码。我输错了。
我的代码
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();
}
答案 0 :(得分: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
之后,您可以修剪前导空格并检查messages[i]
是否不是空的。
请注意,此错误不是Android应用程序错误,而是Java错误编码。
进一步修订,您无需担心null
是for (i = 1; i < messages.length; i++) {
//your business logic...
}
,甚至不是空的。你的代码应该只是
{{1}}
顺便说一句,下次请不要发布您的代码图片,而是将其写在您的问题上。如果您不了解如何格式化代码,请不要担心,其他人会编辑问题并给您一个帮助。对堆栈跟踪的建议相同。
答案 1 :(得分:0)
你在这里面对ArrayIndexOutOfBoundsException,因为你的比较中仍有一些空白区域
替换
for(i=1; messages[i] != null, i++)
与
for(i = 1; i < messages.length && messages[i] != null && !messages[i].trim().isEmpty(); i++)