ここに投稿するのはこれが初めてです。私は過去にかなり潜んでいましたが、今回は私の問題が何であるかを理解できないようです. これは宿題で、自分で解決しようとしました。
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
最初に日付で並べ替え、次に時間で並べ替える必要があります。挿入ソートを使用していましたが、日付の最初の桁のみを読み取り、2 桁を無視していました。したがって、私の解決策は、日付を分割する別のスキャナーを用意し、それでソートすることでした。ただし、次のエラーが発生しているため、あまり詳しくは説明しませんでした。
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 を食べてはいけません。