我正在服用AP CompSci A,我们正在开发一个带有.csv文件的项目。
现在,我正在尝试解析/读取java中的.csv文件(包含字符的十六进制代码),这样我最终可以编写一个applet,在用户提示时将字符转换为十六进制定义。 下面是我试图用来读取.csv文件的代码。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileNotFoundException;
public class showfont {
public static void main ( String [] args) {
showfont obj = new showfont();
obj.run();
}
public void run() {
String csvFile = "/Users/rmollo/Desktop/entityfacts.csv";
BufferedReader br = null;
String line = "";
String cvsSplitBy = ",";
try {
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
String[] answer = line.split(cvsSplitBy);
System.out.println("test [hex= " + answer[2]
+ " "
+ ", description=" +answer[5] + "]");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br !=null ) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("Done");
}
}
当我运行此命令时,收到以下错误消息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at showfont.run(showfont.java:37)
at showfont.main(showfont.java:20)
我确信这是一个措辞严厉的问题(这是我的第一个问题),但如果有人可以向我解释这些错误意味着什么/我如何解决它们,那将非常感激!
谢谢!
答案 0 :(得分:1)
在您的拆分下添加:
if (answer.length < 6) { System.out.println("Line "+line+" is too short"); continue; }
并检查它是否打印任何内容。
答案 1 :(得分:0)
问题似乎在于以下几行:
System.out.println("test [hex= " + answer[2]
+ " "
+ ", description=" +answer[5] + "]");
你的指数超出范围。
答案 2 :(得分:0)
如果文件是这个(https://wush.net/svn/mindprod/com/mindprod/entities/entityfacts.csv),则必须跳过没有逗号的注释行
if(!line.startsWith("#")){
//split code
...
添加更多控件以跳过&#34;不常见&#34;线。