我正在阅读一个包含疾病名称及其治疗方法的文件。因此,我想将名称保存为键,并将补救措施保存为值。我怎样才能达到这个目标?我的代码似乎有一些问题。
public static HashMap<String,Set<String>> disease = new HashMap <> ();
public static void main(String[] args) {
Scanner fin = null;
try {
fin = new Scanner (new File ("diseases.txt"));
while (fin.hasNextLine()) {
HashSet <String> remedies = null;
String [] parts = fin.nextLine().split(",");
int i = 1;
while (fin.hasNext()) {
remedies.add(parts[i].trim());
i++;
}
disease.put(parts[0],remedies);
}
fin.close();
}catch(Exception e) {
System.out.println("Error: " + e.getMessage());
}
finally {
try {fin.close();} catch(Exception e) {}
}
Set <String> result = disease.get("thrombosis");
display(result);
public static <T> void display (Set<T> items) {
if (items == null)
return;
int LEN = 80;
String line = "[";
for (T item:items) {
line+= item.toString() + ",";
if (line.length()> LEN) {
line = "";
}
}
System.out.println(line + "]");
}
这是我的代码
癌症、疼痛、肿胀、出血、体重减轻
痛风、疼痛、肿胀 甲型肝炎、变色、不适、疲倦
血栓、心率高
糖尿病、尿频
这是 txt 包含的内容。
最佳答案
在您的代码中,您尚未初始化补救措施 HashSet(这就是它在第 14 行抛出 NullPointerException 的原因)。 第二个问题是: i 增加 1 并且您没有检查 pats 数组的大小( i > parts.length )。 我编辑了你的代码:
Scanner fin = null;
try {
fin = new Scanner(new File("diseases.txt"));
while (fin.hasNextLine()) {
HashSet<String> remedies = new HashSet<String>();
String[] parts = fin.nextLine().split(",");
int i = 1;
while (fin.hasNext()&&parts.length>i) {
remedies.add(parts[i].trim());
i++;
}
disease.put(parts[0], remedies);
}
关于java - 如何读取文件并保存到 hashmap 中,然后将第一个元素保存为键,其余元素保存在集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51588500/