从文本文件

时间:2017-07-26 15:30:47

标签: java date arraylist

我有一个看起来像这样的文本文件

2017-06-14  7932
2017-06-15  10092
2017-06-16  7626
2017-06-17  7613
2017-06-18  11072
2017-06-19  8286
2017-06-20  9293

我正在尝试将值存储在ArrayList

我的代码:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.io.*;
import java.util.Scanner;

public class Sample2 {

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

        List<Date> l1 = new ArrayList<Date>();
        List<Integer> l2 = new ArrayList<Integer>();

        Scanner s = new Scanner(new FileReader("t1.txt"));

        while (s.hasNext()) {
         l1.add(s.nextInt());      !!!!-----Error Line-----!!!!!!!!
         l2.add(s.nextInt());
        }


        s.close();

        System.out.println(l1);
        System.out.println(l2);;
    }
}

我收到以下错误:

  

线程“main”中的异常java.lang.Error:未解决的编译问题:   类型List中的方法add(int,Date)不是   适用于参数(int)     在Sample2.main(Sample2.java:17)

我该如何解决?

3 个答案:

答案 0 :(得分:1)

两个建议:

  1. 创建一个小类来保存日期和属于一起的int。为什么?请参阅Jon Skeet的Anti-pattern: parallel collections
  2. 跳过过时的Date课程,改用现代LocalDate。它模拟没有时间的日期,这正是您在这里所需要的。它还可以开箱即用解析您的日期,无需显式格式,因此非常方便您的特定用途。
  3. 下面我将代码集中在一个类中,你可能想要一个包含更多类的设计。我会把它留给你。

    public class Sample2 {
    
        private LocalDate date;
        private int value2;
    
        public Sample2(LocalDate date, int value2) {
            this.date = date;
            this.value2 = value2;
        }
    
        @Override
        public String toString() {
            return "\nSample2 [date=" + date + ", value2=" + value2 + "]";
        }
    
        public static void main(String[] args) throws FileNotFoundException {
    
            List<Sample2> l = new ArrayList<>();
    
            Scanner s = new Scanner(new FileReader("t1.txt"));
    
            while (s.hasNext()) {
                l.add(new Sample2(LocalDate.parse(s.next()), s.nextInt()));
            }
    
            s.close();
    
            System.out.println(l);
        }
    }
    

    程序打印

    [
    Sample2 [date=2017-06-14, value2=7932], 
    Sample2 [date=2017-06-15, value2=10092], 
    Sample2 [date=2017-06-16, value2=7626], 
    Sample2 [date=2017-06-17, value2=7613], 
    Sample2 [date=2017-06-18, value2=11072], 
    Sample2 [date=2017-06-19, value2=8286], 
    Sample2 [date=2017-06-20, value2=9293]]
    

    我还会留给你添加getter(你可能不需要setter)并找到更好的变量名。你知道数字是什么意思。

答案 1 :(得分:0)

您可以尝试使用以下代码

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class Sample2 {
    private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

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

    List<Date> l1 = new ArrayList<Date>();
    List<Integer> l2 = new ArrayList<Integer>();

    Scanner s = new Scanner(new FileReader("t1.txt"));

    while (s.hasNext()) {
        l1.add(getDate(s.next()));
        l2.add(s.nextInt());
    }

    s.close();
    System.out.println(l1);
    System.out.println(l2);
}

private static Date getDate(String next) {
    Date date = null;
    try {
        date = dateFormat.parse(next);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

}

答案 2 :(得分:0)

您需要使用int方法检查nextInt()

“else”s.next()将返回String

这将解决您的错误:

while (s.hasNext()) {
   if (s.hasNextInt()) {
       int myInt = s.nextInt();
       System.out.println(myInt);
   } else {
       String dateAsString = s.next();
       System.out.println(dateAsString);
   }
}

当我运行此代码时,我得到:

2017-06-14
7932
2017-06-15
10092
2017-06-16
7626
2017-06-17
7613
2017-06-18
11072
2017-06-19
8286
2017-06-20
9293

您必须将日期字符串转换为localDate()Date()