1

テストをコンパイルして実行すると、次のメッセージが表示されます。 StringIndexOutOfBoundsException: String index out of range: -3

部分文字列で何か間違ったことをしたと思いますが、どこにあるのかわかりません。

これをテストする必要があります。

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

1 に答える 1

0

私の推測では、あなたの例外はここで発生します:

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

.がファイル名の最初の文字である場合 (例: ) ".mp3"、インデックスは に0なり、その後の部分文字列はサイズ 0 の文字列にsubstringなり-3ますIndexOutOfBoundsException。文字列にファイルの種類以外のものが含まれていることを確認してください。

入力パラメーターに常にファイル拡張子が含まれることがわかっている場合は、次のように防ぐことができます。

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

filetypeファイル名を取得するには、削除する前に を取得する必要があります。この行の後:

filename = filename.substring(0,ending);

filenameファイル拡張子が含まれなくなりました。

于 2013-04-22T13:39:22.560 に答える