我正在编写一个方法来编辑CSV文件中的记录,该文件应该打印除了行编辑之外的所有内容,然后将编辑后的版本打印到新文件中。
while((line = br.readLine()) != null) {
if(line.contains("PATRON")) {
pw.println(line);
}
if(!line.contains("PATRON")) {
String[] str = line.split(",", 7);
if(str[1].equals(ID)) {
pw.println(str[0] + "," + ID + "," + str[2] + "," + "false" + "," + "0" + "," + str[5] + "," + "0");
}else {
pw.println(line);
}
}
}
当我尝试运行它并输入有效的ID时,它会给我这个例外
java.lang.ArrayIndexOutOfBoundsException: 1
at myproject.Materials.returnmat(Materials.java:296)
at myproject.Library.mmenu(Library.java:121)
at myproject.Library.mainmenu(Library.java:143)
at myproject.Library.main(Library.java:11)
但是在运行一些测试后,
for(int x=0;x<str.length;x++) {
System.out.println(x+ ": " +str[x]);
}
它完全输出id期望值,1:101,1:102等。 所以这告诉我ID肯定在str [1]索引。
为什么它会让我异常?
编辑:如果相关,这就是我怎么称呼它。 case "7":
System.out.println("Enter material ID: ");
String matsid = scan.nextLine();
mats.returnmat(matsid);
scan.nextLine();
break;
答案 0 :(得分:0)
在执行if(str [1] .equals(ID)){
之前检查字符串长度类似的东西:
if(str.length<1) {
System.out.println("line no good="+line);
} else ...
你可能在CSV中有一条坏线,或者这可能是最后一个空行。
答案 1 :(得分:0)
下面
String[] str = line.split(",", 7);
if(str[1].equals(ID)) {
分裂线必须具有长度= 1的返回数组,因此最大索引将为0 - 但是您使用str[1]
超过它;