我正在尝试使用以下代码将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
”,即使我从文本文件中删除了除第一行以外的所有内容。有人可以帮我吗?
编辑:谢谢大家的帮助。问题在于完全不同于其他问题。我没有在我的主要方法中将我的文件正确地放入扫描仪......
答案 0 :(得分:4)
您应该只使用line.split(" ")
,它将返回String
数组,然后分别使用索引0
和1
获取第一个或第二个值得到的数组如下:
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);
}