2013-02-09 3 views
-1

У меня проблема в моем коде Android. Моя цель этого кода для чтения каждой строки текстового файла в соответствии со статической строкой также должна отображать все согласованные вопросы. Моя статическая строка ввода - «что такое ваша DOB», а также файл с текстом (fms.txt), в котором есть все вопросы в папке с ресурсами. Затем я скомпилировал этот код. Я получил результат с ошибками.ArrayIndexOutOfBoundException при отображении совпадающих строк

Мой код

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(); 
} 

enter image description here

ответ

0

Вы столкнулись здесь ArrayIndexOutOfBoundsException, потому что вы все еще где-то белое пространство в Comparision

заменить

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

с

for(i = 1; i < messages.length && messages[i] != null && !messages[i].trim().isEmpty(); i++) 
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... 
} 

Кстати, в следующий раз, пожалуйста, не размещайте изображения вашего кода, вместо того, чтобы написать его на свой вопрос. Если вы не понимаете, как отформатировать код, не волнуйтесь, кто-то другой отредактировал бы вопрос и дал бы вам руку. Такой же совет для стека.