字符串索引超出范围:-1

时间:2011-03-27 11:15:26

标签: java string exception indexing

我有类似的问题。这是我的来源片段:

FileWriter fstream = new FileWriter("results_for_excel.txt");
BufferedWriter writer = new BufferedWriter(fstream);
String sourceDirectory = "CVs";
File f = new File(sourceDirectory);
String[] filenames = f.list();
Arrays.sort(filenames);
String[] res = new String[filenames.length];
for (int i = 0; i < filenames.length; i++) {
    System.out.println((i + 1) + " " + filenames[i]);
}


for (int i = 0; i < filenames.length; i++) {
    int beg = filenames[i].indexOf("-");
    int end = filenames[i].indexOf(".");
    res[i] = filenames[i].substring(beg,end);
    System.out.println((i+1)+res[i]);
    writer.write(res[i] + "\n");
}
writer.flush();
writer.close();

我在res [i] = filenames [i] .substring(beg,end)中得到一个异常; 我无法想象发生了什么。谢谢你提前:) P.S我已阅读所有副本但未发生任何事情:(

6 个答案:

答案 0 :(得分:1)

要么

int beg = filenames[i].indexOf("-");
int end = filenames[i].indexOf(".");

返回-1,可能有一个不包含的文件。

答案 1 :(得分:1)

发生错误,因为文件名不包含' - '和'。'。在这种情况下,indexOf会返回-1,这不是substring的有效参数。

答案 2 :(得分:1)

begend为-1。这意味着文件名不包含-.。很简单:)

答案 3 :(得分:1)

之后添加以下代码
int beg = filenames[i].indexOf("-");
int end = filenames[i].indexOf(".");

这将显示格式错误的文件名;

if (beg == -1 || end == -1)
{
    System.out.println("Bad filename: " + filenames[i]);
}

答案 4 :(得分:0)

此代码中的一个字符

int beg = filenames[i].indexOf("-");
int end = filenames[i].indexOf(".");
找不到

,因此begend等于-1。这就是为什么在使用否定参数调用substring时遇到异常的原因。

答案 5 :(得分:0)

问题出现在名为“.directory”的KDE文件中。非常感谢大家:)