import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
public class CSVReader
{
public static void main(String[] args) throws FileNotFoundException
{
Scanner scanner = new Scanner(new File("Lunch.csv"));
ArrayList<String> AccountNum = new ArrayList<String>();
ArrayList<String> AccountBal = new ArrayList<String>();
scanner.useDelimiter(",");
while(scanner.hasNext())
{
AccountNum.add(scanner.next());
AccountBal.add(scanner.next());
}
scanner.close();
display(AccountNum, AccountBal);
}
public static void display(ArrayList AccountNum, ArrayList AccountBal)
{
System.out.println("\nThe size of the list is " + AccountNum.size());
for(int x = 0; x < AccountNum.size(); ++x)
{
System.out.println("position " + x + " Number: " + AccountNum.get(x));
System.out.println("position " + x + " Number: " + AccountBal.get(x));
}
}
}
该程序应从CSV文件读取为两个数组。它可以很好地编译,但是当我运行它时,它会引发NoSuchElementException。仅使用一个数组时,该程序即可运行。有谁知道为什么会抛出该异常以及如何解决它?
最佳答案
编辑:要更正我对ChrisCM的评论的答案,这将防止在您仍然交替扫描程序输入时收到的异常。
while(scanner.hasNext())
{
AccountNum.add(scanner.next());
if(scanner.hasNext())
AccountBal.add(scanner.next());
}
您可能会发现列表不完整(AccountNum的最后一个元素为空格),可以通过以下方法解决此问题
if(AccountNum.get(AccountNum.size() - 1).trim().equals("")) {
AccountNum.remove(AccountNum.size() - 1);
}
如果列表仍然不均匀,则需要调试程序以找出问题所在。
解析输入的另一种方法:
while(scanner.hasNext())
{
String temp = scanner.next();
if(temp.trim().equals("") && scanner.hasNext()) {
throw new Exception("This shouldn't happen");
} else {
AccountNum.add(temp);
}
if(scanner.hasNext())
AccountBal.add(scanner.next());
}
您也可以切换到使用opencsv之类的库,该库可以处理输入文件中的空白伪造。
关于java - NoSuchElementException与两个ArrayLists,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16322935/