Java StringIndexOutOfBoundsException:字符串索引超出范围:-3

Java StringIndexOutOfBoundsException:字符串索引超出范围:-3,java,string,indexing,indexoutofboundsexception,Java,String,Indexing,Indexoutofboundsexception,当我编译和运行测试时, 出现以下消息: StringIndexOutOfBoundsException:字符串索引超出范围:-3 我想我对子字符串做了一些错误的处理,但我不知道在哪里 这应该进行测试: parsePathname的参数:.mp3 输出getAuthor:空字符串 输出getTitle:空字符串 这是我的代码: public void parseFilename(String filename) { //Dateiendung entfernen int endin

当我编译和运行测试时, 出现以下消息: StringIndexOutOfBoundsException:字符串索引超出范围:-3

我想我对子字符串做了一些错误的处理,但我不知道在哪里

这应该进行测试:

parsePathname的参数:.mp3 输出getAuthor:空字符串 输出getTitle:空字符串 这是我的代码:

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

我猜您的例外情况发生在这里:

ending = filename.lastIndexOf('.');
filename = filename.substring(0,ending);
filetype = filename.substring(filename.length()-3);  //<- Here
您应该先获取文件类型,然后再删除它以获取文件名。在这一行之后:

filename = filename.substring(0,ending);
文件名不再包含文件扩展名

filename = filename.substring(0,ending);