java - 在文件 I/O 期间获取 IndexOutOfBoundsException
问题描述
我正在执行一项任务,我必须读取一个包含美国州/领土名称及其人口的 .txt 文件,并将州分配给一个 ArrayList 并将人口分配给另一个(并行)。.txt 文件格式如下
state name,123456
state name,123456
所以名称和整数信息之间的分隔是“,”字符。我编写了以下方法来读取文件:
public static void readFile(ArrayList<String>states, ArrayList<Integer> pops){
try{
Scanner read = new Scanner(new File("StatesPop.txt"));
while(read.hasNext()){ //while there is still content to read
if(read.hasNextInt()){ //if the next info is an int
pops.add(read.nextInt()); //read it and add it to the pop list
if(read.hasNextLine()){ //if there is a next line
read.nextLine(); //moves to the beginning of the next line
}
}
else{ //if it's not an int, it's a char
read.useDelimiter(","); //read until hitting a comma
String name = read.next();
states.add(name); //add to the states names list
}
}
read.close();
}
catch(FileNotFoundException fnf){
System.out.println("File was not found.");
}
}
我得到的错误方法如下:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:459)
at Main.sortStates(Main.java:75)
at Main.menu(Main.java:174)
at Main.main(Main.java:15)
解决方案
public static void readFile(ArrayList<String> states, ArrayList<Integer> pops) {
try {
Scanner read = new Scanner(new File("StatesPop.txt"));
while (read.hasNextLine()) {
String line = read.nextLine();
String[] lineSplit = line.split(",");
states.add(lineSplit[0]);
pops.add(Integer.valueOf(lineSplit[1]));
}
read.close();
} catch (FileNotFoundException fnf) {
System.out.println("File was not found.");
}
}
//[state name, state name]
//[123456, 123456]
推荐阅读
- android - SMS Retriever API 不适用于 Firebase PhoneAuth
- yocto - yocto bitbake 中是否有任何选项可以使命令自动完成?
- objective-c - 如何在 Cocoa Mac os 开发中使用菜单项使鼠标悬停在 NSControlSegment 上?
- c++ - 为什么 cin 在 C++ 中被跳过?
- svg - svg过滤器使半透明像素不透明?
- amazon-web-services - EKS:在特定 AWS 自动缩放组上运行特定服务(pod)
- html - 如何使用开源工具/插件从 PSD 文件中导出 HTML 和 CSS 代码?
- javascript - 无效的 JSON 格式数据表
- c++ - 如何取消引用指向 C++ 中对象指针映射的指针?
- php - 存储As()在Laravel中生成的列(MySQL)中的错误