[英]NoSuchElementException when reading in file
這是我第一次在這里發帖。 我過去已經潛伏了很多,但似乎無法弄清楚這次我的問題是什么。 這是用於作業,我已嘗試自己解決。
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);
//}
}
} } }
被注釋掉的部分只是我在查看是否是問題所在,因為我擔心它不起作用的原因是因為標頭中沒有任何“ /”。 但是,事實並非如此。 這是我正在讀取的文件的示例:
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();
這在某種程度上解決了問題,但是我不知道為什么掃描程序會跳過文件的第一部分“名稱”。 “名稱”變為日期,“日期”變為時間,“時間”沒有任何可搶奪之處,因此不會拋出任何此類元素。 我正在做nextLine,所以它不應該吃\\ n。
作業提示:
您需要使用IDE的調試器來解決此問題。 在此行設置一個斷點:
Scanner dateScan = new Scanner(date);
看看是date
如果那對您來說仍然沒有使問題變得明顯,那么請使用調試器一次執行一個語句,觀察next
調用將返回什么。 (您可能需要繞過外圈幾次...)
附言:我認為我可以理解問題所在……但是,如果您遵循我的建議,您應該可以自己迅速找到它。 並學習使用調試器:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.