这是我第一次在这里发帖。我过去潜伏了很多,但这次似乎无法弄清楚我的问题是什么。这是家庭作业,我已经尝试自己解决。
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();
这在一定程度上解决了问题,但我不明白为什么扫描仪会跳过文件的第一部分,即“名称”。“name”变成了日期,“date”变成了时间,而“time”没有什么可抓取的,所以它不会抛出这样的元素。我正在做 nextLine,所以它不应该吃掉 \n。