从Scanner向数组添加数字

时间:2013-11-07 02:38:38

标签: java java.util.scanner

我有一个包含以下内容的文本文件:

10/23/2013  47  34  23  31  03  13  
10/19/2013  33  09  56  54  57  05  
10/16/2013  03  42  26  34  28  27  
10/12/2013  10  58  26  57  08  04  

我能够使用Scanner并将日期添加到ArrayList“DATE”,然后我将其余的数字添加到另一个ArrayList“NUM”(参见代码)

我正在尝试构建一个ArrayList> “MAIN”或甚至是将每行作为索引保存的HashMap如下:

MAIN [[47,34,23,31,03,13],[33,09,56,54,57,05],[03,42,26,34,28,27],[10, 58,26,57,08,04]

我无法使用下面的代码获得所需的结果,我需要帮助重构代码以获得所需的结果

谢谢。

   public class Grades {

static String line;
static BufferedReader reader;

static String file = "file/Grades.txt";

static ArrayList<ArrayList<String>> MAIN;
static ArrayList<String> NUM ;

static ArrayList<String> DATE ;
static ArrayList rand;

static int index = 0;

public static void main(String args[]) {

    MAIN = new ArrayList<ArrayList<String>>();
    //lotoNum();



    DATE = new ArrayList<String>();



try {
    Scanner scan = new Scanner(new BufferedReader(new FileReader(file)));

    wwhile(scan.hasNextLine()){
        NUM = new ArrayList<String>();

        String token = scan.nextLine();
        String [] line = token.split("  ");


            DATE.add(line[0]);

            for (int i = 1; i < line.length; i++){
                NUM.add(line[i]);
            }
            MAIN.add(index, NUM);
                index++;


                System.out.println(MAIN);

                //NUM.clear();
                //NUM.trimToSize();


        }


        }

    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

}
 }

输出:
[[47,34,23,31,03,13]]
[[47,34,23,31,03,13],[33,09,56,54,57,05]]
[[47,34,23,31,03,13],[33,09,56,54,57,05],[03,42,26,34,28,27]]
[[47,34,23,31,03,13],[33,09,56,54,57,05],[03,42,26,34,28,27],[10,58,26, 57,08,04]]

1 个答案:

答案 0 :(得分:0)

试试这个

int index = 0;

while (scan.hasNextLine()){
    String line = scan.nextLine();
    String[] tokens = line.split("  ");

    // you must create a new list everytime or else they will 
    // reference the same object.  That's why you're getting the output.
    // you are.  Also delete the declareation outside of this loop
    // ArrayList<String> NUM;   ----    NUM = new ArrayLis<String>();

    ArrayList<String> NUM = new ArrayLis<String>();

    DATE.add(tokens[0]);

    for (int i = 1; i < tokens.length; i++){
        NUM.add(tokens[i]);
    }

    MAIN.add(index, NUM);
    index++;

    System.out.println(MAIN);

    NUM.clear();


}