我的代码是这样的:
public static void main(String args[]) throws IOException
{
String name;
int population;
String[] tokens;
FileReader fin = new FileReader("Test.txt");
Scanner src = new Scanner(fin);
src.useDelimiter(",");
while (src.hasNextLine())
{
if (src.hasNext())
{
tokens = src.nextLine().split(",\\s");
name = tokens[0];
population = Integer.parseInt(tokens[1].trim());
System.out.printf("Name:%-15s %-15d\n", name, population);
} else
{
String str = src.next();
if (str.equals(""))
{
break;
} else
{
System.out.println("File format error.");
return;
}
}
}
System.out.println("end");
fin.close();
}
在我的测试文件中,我只有一个州名,后跟一个逗号,一个空格,总体,以及可能是一个随机空格。我的输出结果为
..... 名称:弗吉尼亚州7100702
姓名:华盛顿5908684
名称:西弗吉尼亚州1813077
名称:威斯康星州5371210
名称:怀俄明州495304
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1 在javatesters.JavaTesters.main(JavaTesters.java:35) Java结果:1 建立成功(总时间:0秒)
我的测试文件的结尾是
Virginia 7100702
华盛顿5908684
西弗吉尼亚州1813077
威斯康星州5371210
怀俄明州495304总分配人口281424177 435
我希望空行表示文件的结尾
答案 0 :(得分:0)
当您的扫描仪到达不包含“,”的行时,split(",\\s")
调用会将其拆分为一个字符串。因此,当您访问tokens[1]
时,您将超出数组的范围。有很多方法可以解决这个问题。一种方法(虽然不是最干净的)是检查以确保tokens
在使用之前有两个元素。