我需要我的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);
}
}