将格式化的文本文件读入arraylist JAVA

时间:2014-09-30 09:18:21

标签: java arrays arraylist stream

我需要我的java程序来读取格式化的文本文件,我将举例说明它是如何格式化的

http://i.stack.imgur.com/qB383.png

所以#1是列出的国家数量,A是区域,新西兰是国家。

所以我知道我需要读取#之后的数字以及运行循环的次数,然后下一行包含区域名称,它将是数组列表的名称。但至于实际实现这一点,我超级迷失了。

目前我的代码看起来像这样,

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;


public class destination{

    String zone;
    ArrayList<String> countries;

    public Object destinationList(){

        Scanner s = null;
        try {
            s = new Scanner(new File("Files/Destination.txt"));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        ArrayList<String> destinations = new ArrayList<String>();
        while (s.hasNext()) {
            destinations.add(s.nextLine());

        }
        s.close();

        int sz = destinations.size();

        for (int i = 0; i < sz; i++) {
            System.out.println(destinations.get(i).toString());
        }

        return destinations;
    }

}

但这只是将文本文件转储到数组列表中

1 个答案:

答案 0 :(得分:0)

您不需要带有区域和国家/地区的额外课程,它将与地图完美配合:

private Map<String, List<String>> destinations = new HashMap<>();

要使用文件中的值填充地图,您可以编写类似(未经测试)的内容。

Scanner s = new Scanner(new File("Files/Destination.txt"));
int currentCount = 0;
String currentZone = "";
while(s.hasNextLine()) {
    String line = s.nextLine();
    if (line.startsWith("#") { // number of countries
        currentCount = Integer.parseInt(line.substring(1));
    } else if (line.length() == 1) { // zone
        currentZone = line;
        destinations.put(currentZone, new ArrayList<String>(currentCount);
    } else { // add country to current zone
        destinations.get(currentZone).add(line);
    }
}