2017-02-02 9 views
-2

Эта ошибка трудно отладить. Это также происходит не регулярно. Может ли кто-нибудь помочь, пожалуйста? Возможно ли, что метод substring нарушен?StringIndexOutOfBoundsException: индекс строки из диапазона 32 в цикле

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 32 
     at java.lang.String.substring(String.java:1765) 
     at mmk.basej.main(basej.java:186) 

Error in line: "tmp1 = filePathShort1.substring(0, 10)" 

Вот мой код:

  String tmp = null;    
      String pdf_name = null; 
      for (int z = 0; z < list_chek.length; z++) {     
       if (list_chek[z].toString().indexOf("pdf") > 0 | list_chek[z].toString().indexOf("tif") > 0 | list_chek[z].toString().indexOf("jpg") > 0) { 
        String filePath1 = new String(); 
        String filePathShort1 = new String(); 
        String tmp1 = null; 
        filePath1 = dir + list_chek[z].toString(); 
        filePathShort1 = list_chek[z].toString(); 
        tmp1 = filePathShort1.substring(0, 10) 
          + filePathShort1.substring(20, filePathShort.indexOf("tsd7")-1) 
          + "_" 
          + filePath1.substring(
            filePath1.indexOf("tsd7"), filePath1 
              .length() - 4); 

        if (name_no_time.equals(tmp1)) { 
         //System.out.println(name_no_time+" ---- "+tmp1); 
         System.out.println("PDF_NAME " + list_chek[z].toString()); 
         pdf_name = list_chek[z].toString(); 
        } 
        else if ((list_chek[z].toString().indexOf("jpg") > 0) && ((name_no_time + "_1").equals(tmp1))) { 
         System.out.println("JPG_NAME " + list_chek[z].toString()); 
         pdf_name = list_chek[z].toString(); 
        }    
       } 
      } 
+2

StringIndexOutOfBounds довольно понятно. – khelwood

+0

Кроме того, я думаю, что не возможно, что 'tmp1 = filePathShort1.substring (0, 10)' отвечает за вашу ошибку, поскольку из [документации Java API StringIndexOutOfBoundsException] (https://docs.oracle.com/javase/7/ docs/api/java/lang/StringIndexOutOfBoundsException.html) _Thrown by String, чтобы указать, что индекс либо отрицательный, либо больше размера строки. Для некоторых методов, таких как метод charAt, это исключение также генерируется, когда индекс равен размеру строки ._. Вероятно, ваша ошибка связана с другой строкой вашего кода. –

+0

Это что-то о вычислении tmp1. tmp1 = 2017-02-02005002801AFAC_tsd7 и filePathShort1 = 2017-02-02_15-32-46_005002801AFAC_tsd7.pdf – antbug

ответ

0
filePathShort1 = list_chek[z].toString(); 
tmp1 = filePathShort1.substring(0, 10) 

если list_chek [г] .ToString имеет длину < 10, то substring(0, 10) длиннее поставляемом String. Именно здесь происходит ваш индекс за пределами границ. Он пытается ссылаться и элемент за пределами tmp1. Вы получите ту же проблему в следующей строке, если list_chek [z] < 20. вам нужно проверить длину строки перед вызовом подстроки.

+0

Так что если 'filePathShort1 = 2017-02-02_15-32-46_005002801AFAC_tsd7.pdf' и tmp1 должны быть похожими:' 2017-02- 02005002801AFAC_tsd7' Вместо этого я должен использовать 'tmp1 = filePathShort1.substring (0, 9)'? – antbug

+0

Строки имеют фиксированный размер: 'filePathShort1 = 2017-02-02_15-32-46_005002801AFAC_tsd7.pdf' и' tmp1 = 2017-02-02005002801AFAC_tsd7' – antbug

+0

Вы уверены, что они имеют одинаковую длину и достаточно долго? Возможно, вы захотите вставить инструкцию debug для проверки. Тот факт, что он работает иногда, а не другие, и терпит неудачу на этой линии с этим Исключением, является сильным индикатором того, что они не все достаточно долго. – WillD

 Смежные вопросы

  • Нет связанных вопросов^_^