将格式化的文本文件读入数组列表JAVA



我需要我的java程序来读取格式化的文本文件,我将给出一个如何格式化的例子

https://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;
    }
}

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

您不需要额外的区域和国家级别,它将与Map:完美配合

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);
    }
}

相关内容

  • 没有找到相关文章

最新更新