我们的想法是拥有一个包含以下信息的文本文件:
FF0001红色
FF0002蓝色
FF0003黄色
...
提取此信息并将其存储到树形图中。 到目前为止,这是我的代码......
public static void main(String[] args) {
File file = new File("test.txt");
TreeMap<String, String> colors = new TreeMap<String, String>();
BufferedReader br = null;
try {
FileReader fr = new FileReader(file);
br = new BufferedReader(fr);
String line;
String line1;
while ((line = br.readLine()) != null) {
String[] splited = line.split(" ");
for (String part : splited) {
colors.put(part, part);
}
}
Set<Map.Entry<String, String>> set = colors.entrySet();
for (Map.Entry<String, String> col : set) {
System.out.println(col.getKey() + " " + col.getValue());
}
} catch (FileNotFoundException e) {
System.out.println("File does not extist: " + file.toString());
} catch (IOException e) {
System.out.println("Unable to read file: " + file.toString());
} finally {
try {
br.close();
} catch (IOException e) {
System.out.println("Unable to close file: " + file.toString());
} catch (NullPointerException ex) {
// File was never properly opened
}
}
我的输出是:
FF0001 FF0001
FF0002 FF0002
FF0003 FF0003
红色红色
蓝色蓝色
黄色黄色
我是java集合的新手,我需要排序的信息,这就是我选择树形图的原因,但我似乎无法弄清楚为什么它将所有信息存储到密钥和值中。
谢谢,这是第一次发布海报。
答案 0 :(得分:4)
当您使用空格分割线条时,它会生成两个值,例如:比如“FF0001 Red”
它会有
splitted [0] = "FF0001" //id
splitted [1] = "Red" //color
并且您正试图将其存储为:
for (String part : splited) {
colors.put(part, part);//see you are storing same key and value so in above it case like key and value entry "FF0001" and another one for color.
}
相反,你需要这样的东西:
String id = splited[0];
String color = splited[1];
colors.put(id, color);
答案 1 :(得分:0)
你的代码有错误
colors.put(part, part);
所以你在地图中的键和值是相同的。 你可以写一些想法:
String[] splited = line.split("\\s+");
colors.put(splited[0], splited[1]);
阅读关于分割空间的答案: How do I split a string with any whitespace chars as delimiters?
答案 2 :(得分:0)
您需要删除此for循环,
for (String part : splited) {
colors.put(part, part);
}
而是直接使用数组索引作为键和值。
colors.put(splited[0], splited[1]);