这是文本文件。 K:代表一个键,V:代表我要输入的列表中的值。 ie : Strawberry , Apricot 和 Peach 组成了 map 关键类 A 的列表。
K: Class A//
V: Strawberry//
V: Apricot//
V: Peach//
K: Class B//
V: Chocolate//
K: Class C//
V: Creme de menthe//
V: Irish coffee//
此处的程序正确分配了键,但将文件中的每个值都添加到列表中,而不仅仅是我想要的值。
//FillHM.java
import java.io.*;
import java.util.Scanner;
import java.util.*;
public class FillHM {
public static void main (String[] args) {
Map<String, List<String>> map = new HashMap<String, List<String>>();
Scanner sc1 = null;
try {
sc1 = new Scanner(new File("/home/craig/Desktop/mytext.txt"));
}catch (FileNotFoundException e) {e.printStackTrace();}
List<String>values = new ArrayList<>();
String s = " ";
String key = " ";
while (sc1.hasNextLine()) {
Scanner sc2 = new Scanner(sc1.nextLine());
sc2.useDelimiter("//");
while(sc2.hasNext()) {
s = sc2.next();
if (s.startsWith("K:")) {
key = s;
}
if (s.startsWith("V:")) {
values.add(s);
}
map.put(key, values);
} //end while
} //end while
System.out.println(map);
}
}
最佳答案
当您检测到新 key 时,创建一个新列表:
if (s.startsWith("K:")) {
key = s;
values = new ArrayList<>();
}
如果您不这样做,每个键都将映射到相同 列表。您希望每个键都映射到它自己的列表。
关于java - 如何从文本文件中填充 Map<String, List<String>>? -难以动态命名每个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26072242/