ArrayIndexOutOfBoundsException-Java-无循环打印
我有一种方法,读取本地CSV文件并将其存储在数组中。当我试图打印数组的一个索引时,我一直得到ArrayIndexOutOfBoundsException 方法:ArrayIndexOutOfBoundsException-Java-无循环打印,java,csv,exception,Java,Csv,Exception,我有一种方法,读取本地CSV文件并将其存储在数组中。当我试图打印数组的一个索引时,我一直得到ArrayIndexOutOfBoundsException 方法: public void getCsv() throws FileNotFoundException{ String fileName = "ADCSV.csv"; File file = new File(fileName); Scanner inputStream = new Scanner(file
public void getCsv() throws FileNotFoundException{
String fileName = "ADCSV.csv";
File file = new File(fileName);
Scanner inputStream = new Scanner(file);
while(inputStream.hasNext()){
String data = inputStream.next();
//array of strings
String[] values = data.split(",");
System.out.println(values[4]);
}
inputStream.close();
}
csv中的所有信息都存储为常规文本。当我尝试打印时,这是输出:
"adminCount"
"1"
"0"
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at csvTest.test.getCsv(test.java:36)
at csvTest.test.main(test.java:19)
它开始读取特定列中的值。然后它会出错
我觉得我已经关注这个问题有一段时间了,现在我已经不再关注这个问题了
谢谢将您的方法更改为:
public void getCsv() throws FileNotFoundException {
String fileName = "ADCSV.csv";
File file = new File(fileName);
Scanner inputStream = new Scanner(file);
while (inputStream.hasNext()) {
String data = inputStream.next();
// array of strings
String[] values = data.split(",");
if (values.length < 5) {
System.err.println("not enough values: ");
for (int i = 0; i < values.length; i++) {
System.err.println("value " + i + ": " + values[i]);
}
continue;
}
System.out.println(values[4]);
}
inputStream.close();
}
public void getCsv()引发FileNotFoundException{
字符串fileName=“ADCSV.csv”;
文件=新文件(文件名);
扫描仪输入流=新扫描仪(文件);
while(inputStream.hasNext()){
字符串数据=inputStream.next();
//字符串数组
字符串[]值=data.split(“,”);
如果(值。长度<5){
System.err.println(“值不足:”);
对于(int i=0;i
这应该说明问题所在。我的意思是它会打印出出错行的值。因为我们不知道到底是什么导致了错误,这将是一个开始。也许某个地方有一个逗号,它不应该在那里,或者它不见了。
如果本地CSV文件的内容可能包含错误,则应检查拆分行的长度并设置错误处理 如果CSV中没有少于5项的行,我猜最后一行是空的,并且仍在读取中。如果您喜欢比猜测更好的内容,请包含您的CSV。显然,并非所有行都有5个元素。您是否检查了
值实际包含的内容?您的CSV文件看起来如何?如果值包含像aa、bb-bb、cc、d、e、f这样的空格,则next()
将只返回aa、bb
,因为bb-bb
之间有空格。要解决它,您需要nextLine()
而不是next()
。另外,请不要忘记,split
会删除尾随的空字符串。所以“a,b,,,”.split(“,”)
将返回数组[a,b]
而不是[a,b,,]
。要解决这个问题,你可以使用split(“,”,-1)
@Carcigenicate是的,我刚刚通过调试器运行了它,所有行都至少有5个元素,并且值都由整个CSV填充。我不能发布屏幕截图,或者我会发布其中一个调试器。@blur.P这不可能。您有ArrayIndexOutOfBoundsException:4
。我只能看到一个地方进行索引,而您使用的硬编码4与异常匹配。再看一遍数据。真的,你应该解释你的答案,而不是假设它是不言而喻的。这似乎只是捕获错误的解析,而不是实际修复解析。