读入文件时为NoSuchElementException

时间:2014-05-11 00:05:23

标签: java file sorting java.util.scanner nosuchelementexception

这是我第一次在这里发帖。我过去潜伏了很多,但似乎无法弄清楚这次我的问题是什么。这是作业,我试图自己解决。

public class Driver {

public static void main(String[] args) throws FileNotFoundException {

        String name = "", date = "", time = "";
        String month = "", day = "", year = "";

        ArrayList<Customer> customerArray = new ArrayList<Customer>();
        ArrayList<Date> dateArray = new ArrayList<Date>();

        File myFile = new File("./src/Program4/Customers.csv");

        Scanner fileScan = new Scanner(myFile);

        while (fileScan.hasNext()) {
            String lineString = fileScan.nextLine();

            Scanner lineScan = new Scanner(lineString);
            lineScan.useDelimiter(",");

            while (lineScan.hasNext()) {

//              if (lineScan.next().equalsIgnoreCase("Name") == true
//                      || lineScan.next().equalsIgnoreCase("Date") == true
//                      || lineScan.next().equalsIgnoreCase("Time") == true) {                  
//                  lineScan.next();                    
//              } 
            //  else {      

                    name = lineScan.next();
                    date = lineScan.next();
                    time = lineScan.next();                     

                    Scanner dateScan = new Scanner(date);
                    dateScan.useDelimiter("/");

                    while (dateScan.hasNext()) {
                        month = dateScan.next();
                        day = dateScan.next();
                        year = dateScan.next();
                    }

                    Customer newCustomer = new Customer(name, date, time, day,
                            month);
                    customerArray.add(newCustomer);
                //}
            }
        } } }

注释掉的部分只是我看到这是否是问题,因为我担心它不起作用的原因是因为标题没有任何&#34; /&#34; 。然而,事实并非如此。这是我正在阅读的文件的示例:

Name    Date    Time
SK]CD[TUI   12/3/2014   5:41 AM
KXFPPHXPK   12/9/2014   7:43 AM
RVZTA[KLT   7/17/2014   9:35 AM
AUTVFXVZW   12/27/2014  2:39 AM
CFH\XBJRE   2/3/2014    9:51 AM
RT@KNCPHO   4/19/2014   8:42 AM

我必须先按日期排序,然后按时间排序。我正在使用插入排序,但它只是读取日期的第一个数字,它忽略了两位数。所以,我的解决方案是让另一台扫描仪分解日期,然后按此排序。但是,我并没有太过分,因为我收到了以下错误。

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at Program4.Driver.main(Driver.java:55)

第55行:

day = dateScan.next();

所以,不知道问题是什么。 希望我的方法是对此进行排序的最佳方法,如果不是,如果有人可以节省一些时间并建议替代方案,那就好了。

谢谢!

====================

编辑:

好吧,我想出了最初的问题。我补充说:

    if (lineScan.next().equalsIgnoreCase("Name") == true) {
        lineScan.nextLine(); } 
else {

    name = lineScan.next();
    date = lineScan.next();
    time = lineScan.next();

这有点解决了这个问题,但我无法弄清楚为什么扫描仪会跳过文件的第一部分,即名称。&#34; &#34;名称&#34;成为日期,&#34;日期&#34;成为时间,&#34;时间&#34;没有什么可以抓住所以它不会抛出这样的元素。我正在做nextLine,所以它不应该吃\ n。

1 个答案:

答案 0 :(得分:3)

家庭作业提示:

您需要使用IDE的调试器来解决此问题。在此行设置断点:

    Scanner dateScan = new Scanner(date);

并查看date是什么。如果这不能使问题显而易见,那么使用调试器一次执行一个语句,观察next调用返回的内容。 (你可能需要绕过外环几次......)


P.S。我想我可以看出问题是什么......但如果你听从我的建议,你应该能够很快找到它。并学会使用调试器: - )