2013-04-22 5 views
1

Когда я компиляции и запуска моих тестов, появляется это сообщение: StringIndexOutOfBoundsException: String index out of range: -3StringIndexOutOfBoundsException: индекс строки из диапазона: -3

Я думаю, что я сделал что-то не так с подстроки, но я могу» t выяснить, где.

Это должно быть испытано:

Argument for parsePathname: .mp3 
Output getAuthor: empty String 
Output getTitle: empty String 

Это мой код:

public void parseFilename(String filename) 
{ 
    //Dateiendung entfernen 
    int ending; 
    ending = filename.lastIndexOf('.'); 
    filename = filename.substring(0,ending); 
    filetype = filename.substring(filename.length()-3); 


    //Abfrage, ob Bindestrich(hyphen) vorhanden 
    //i+1 ist Position vom Bindestrich 
    boolean has_hyphen = false; 
    int i; 


    for(i=0; i<filename.length(); i++) 
    { 
     if(filename.charAt(i) == ' ' && filename.charAt(i+1) == '-' && filename.charAt(i+2) == ' ') 
     { 
      has_hyphen = true; 
      break; 
     } 
    } 

    if (!has_hyphen || (filename.length() == 1 && filename.charAt(0) == '-')) 
    { 
     author =""; 
     title = filename; 
    } 


    if (filename.length() == 0 || (filename.charAt(0) == ' ' && filename.charAt(1) == '-' && filename.charAt(2) == ' ')) 
    { 
     author = ""; 
     title = ""; 
    } 

    if (has_hyphen) 
    { 
     author = filename.substring(0,i); 
     author = author.trim(); 
     title = filename.substring(i+2); 
     title = title.trim(); 
    } 
} 

ответ

0

Мое предположение было бы, что ваше исключение происходит здесь:

ending = filename.lastIndexOf('.'); 
filename = filename.substring(0,ending); 
filetype = filename.substring(filename.length()-3); //<- Here 

Если . является первым char из имени файла (например, ".mp3"), индекс будет 0 и подстрокой впоследствии будет строка размера 0. Затем вы вызываете substring с -3, и он выдает IndexOutOfBoundsException. Убедитесь, что строка содержит не только тип файла.

Если вы знаете, что входной параметр всегда будет содержать расширение файла, которое вы могли бы предотвратить это так:

ending = filename.lastIndexOf('.'); 
if(ending == 0) { 
    filetype = filename; 
    filename = ""; 
} else { 
    ... 

Вы должны получить filetype, прежде чем удалить его, чтобы получить имя файла. После этой строки:

filename = filename.substring(0,ending); 

filename больше не содержит расширения файла.

+0

Большое спасибо, сейчас это работает, и я понимаю, почему! :) – theblackcrow1

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