2013-05-07 3 views
-8

Я озадачен, почему posOfDot возвращается 15:Почему indexOf возвращает неверный индекс?

for(String l2 : list2){ 

    System.out.println("l2FileNAme: "+l2); 
    int posOfI= l2.indexOf("_")+1; 
    System.out.println("posOfI: "+posOfI); 

    String l2FileName = l2.substring(0,posOfI); 
    System.out.println("l2FileNAme: "+l2FileName); 

    for(String l1 : list1){ 

     int posOfDot= l2.indexOf("."); 
     System.out.println("posOfDot: "+posOfDot); 
     //substring the root of the file 
     //String l1FileName = l1.substring(0,posOfDot); //fails here as posOfDot exceeds string length in substring. 
     System.out.println("l1FileNAme: "+l1); 
    } 
} 

Выход:

l2FileNAme: scenario8_items.txt 
posOfI: 10 
l2FileNAme: scenario8_ 
posOfDot: 15 
l1FileNAme: scenario8_.csv 

Я ожидаю posOfDot быть 10, так же, как posOfI, но она возвращает 15. Как приехать?

Что я пробовал:

  • LastIndexOf
  • IndexOf
  • как символ обозначения и обозначения строки ('' и "")

--EDIT--

В каждом списке (list1 и list2) содержится список имен файлов. Это не фактический файл, а просто имя файла.

+2

Как мы должны знать, что находится в этих файлах? – m3th0dman

+0

Я не ищу файл - я ищу имя файла. –

+5

Возможно, использование правильной строки «String» принесет лучшие результаты? Типичный пример того, почему бы не назвать такие переменные, даже если вы думаете, что ничто не может пойти не так. 'int posOfDot = l2.indexOf (". ");' - это * точно *, где '.' находится в' l2' –

ответ

4
l2FileNAme: scenario8_items.txt 

Подсчет символов на экране, то . находится в 16-м месте, которое находится в индексации нулевой основе 15. Вы выполняете это на l2.

Кажется, что правильный вывод для меня.

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