Java String索引超出文本文件输入的范围

时间:2016-09-13 19:01:53

标签: java indexing

我正在尝试使用以下代码将String输入拆分为两个:

public TypeValue(String line) {
    while (line.charAt(i) != ' ') {
        i++;
        System.out.println(i);
    }
    type = line.substring(0,i);
    value = line.substring(i);
}

我的输入是一个文本文件,如下所示:

10 16
10 32
10 9024720
F 10
F 1
F 111111
F 100000
F 10110110100111001

但是,我总是得到java.lang.StringIndexOutOfBoundsException: String index out of range: 13。这只有在我尝试从文本文件中读取输入时才会发生。当我使用终端逐个输入行时,它工作得很好。

我一直在寻找几个小时,但我无法弄清楚是什么导致了这一点。它也总是“13”,即使我从文本文件中删除了除第一行以外的所有内容。有人可以帮我吗?

编辑:谢谢大家的帮助。问题在于完全不同于其他问题。我没有在我的主要方法中将我的文件正确地放入扫描仪......

3 个答案:

答案 0 :(得分:4)

您应该只使用line.split(" "),它将返回String数组,然后分别使用索引01获取第一个或第二个值得到的数组如下:

String[] values = line.split(" ");
type = values[0];
value = values[1];

另一种方法是使用line.indexOf(' ')获取String中空格字符的索引。

int index = line.indexOf(' ');
// From 0 to the index where we found the space
type = line.substring(0, index);
// Starts from index + 1 to skip the space
value = line.substring(index + 1);

答案 1 :(得分:1)

您忘记初始化i。试试这个:

public TypeValue(String line) {
    int i=0;
    while (line.charAt(i) != ' ') {
        i++;
        System.out.println(i);
    }
    type = line.substring(0,i);
    value = line.substring(i);
}

答案 2 :(得分:0)

尝试比较原始ascii值而不是字符, 如在

public TypeValue(String line) {
    int i=0;
    //ascii value for space is 32
    while ((int)line.charAt(i) != 32) {
        i++;
        System.out.println(i);
    }
    type = line.substring(0,i);
    value = line.substring(i);
}