【发布时间】:2014-02-15 19:46:38
【问题描述】:
我发现了问题。显然,csv 文件中的某些名称中有随机空格,这导致第 257 个条目以及后来的其他几个条目出现中断。所以,我只是拿出空间,现在一切正常。感谢所有试图提供帮助的人。
我有这个从 csv 文件读取的代码,将值放入字符串数组中,然后打印出来供我查看。它运行良好,直到到达数组的第 257 个成员(每个成员有 3 个值:姓氏、名字和出生年份)。这是代码的功能版本:
package testing.csv.files;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//.csv comma separated values
String fileName = "C:/Users/Owner/Desktop/Data.csv";
File file = new File(fileName); // TODO: read about File Names
try {
Scanner inputStream = new Scanner(file);
inputStream.next(); //Ignore first line of titles
while (inputStream.hasNext()){
String data = inputStream.next(); // gets a whole line
String[] values = data.split(",");
System.out.println(data);
}
inputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
现在,当我换行时
System.out.println(data);
到这里:
System.out.println(values[2]);
我期望发生的只是为数组中的每个人打印出生年份(第 3 列)。但是,它只打印到第 257 个人的出生年份(超过 18,000 个),并给我以下错误消息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at testing.csv.files.Test.main(Test.java:22)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
“java:22”似乎是指我在上面发布的代码的上述 sn-p 代码,我已更改。我不确定问题是什么。如果我的语法错误,为什么它会打印出来?我唯一能想到的是,也许一个字符串数组只能处理 257 个不同的人,每个人都有自己的 3 个值。如果是这种情况,那么我需要某种更大版本的字符串来保存我的所有数据。有没有人遇到过这个问题?问题出在我的语法和循环中吗?
【问题讨论】:
-
您正在调用 inputStream.next() 并且您的评论说 //gets 整行。如果这是真的,那只是因为纯粹的机会。您应该使用 inputStream.nextLine() 来获取文件的下一行