当我编译并运行我的测试时,
出现此消息:
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();
}
}
答案 0 :(得分: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
不再包含文件扩展名。