java的。读取文件,按某栏排序并打印

时间:2013-12-26 19:10:33

标签: java arrays sorting

我有一个文本文件

category1 1 10 101 good1 1
category6 2 11 105 good5 10
category1 5 13 103 good4 6
category3 6 14 102 good2 5
category5 3 12 107 good1 3
category7 4 12 128 good8 1
category3 5 17 134 good5 8
category2 1 19 143 good4 8
category4 2 16 152 good7 8
category5 9 13 163 good8 6
category9 8 14 165 good4 4
category0 5 15 156 good3 12
category2 6 13 147 good7 1
category7 4 12 138 good5 3
category7 3 12 124 good6 9
category8 8 11 102 good9 6

我需要按类别名称对其进行排序。这就是我已经拥有的:

BufferedReader reader = new BufferedReader(new FileReader("/Data.txt"));
    Map<String, String> map=new TreeMap<String, String>();
    String line="";
    while((line=reader.readLine())!=null){
        map.put(getField(line),line);
    }
    reader.close();
    for(String val : map.values()){
        System.out.println(val);
   }

它对文件数据进行排序,但只显示唯一的行,我需要显示所有内容。怎么做?

4 个答案:

答案 0 :(得分:2)

将您的数据读入自定义类。为您的类声明hash()和equals()。可选toString()打印类似于输入的输出。将行读入自定义类的对象(使用扫描程序可选),将对象添加到List并使用Collections.sort()和自定义Comparator。

答案 1 :(得分:0)

假设你有独特的行,你可以使用TreeSet - 它会为你排序(字母顺序应该没问题)。

BufferedReader reader = new BufferedReader(new FileReader("/Data.txt"));
Set<String> set=new TreeSet<String>();
String line="";
while((line=reader.readLine())!=null){
    set.add(line);
}
reader.close();
System.out.println(set)

答案 2 :(得分:0)

问题是您正在使用Map的实现。映射只会为一个实例存储给定键的值。如果没有看到getField()方法的实现,那么当您调用map.put(getField(line),line);时,具有相同密钥的行会被覆盖。我会使用某种形式的List代替TreeMap

答案 3 :(得分:0)

你可以读取每一行和split(“”),它将为你提供一个包含该行数据的字符串数组,然后你可以检查第一个索引以查看该类别。像你一样使用Hashmap,你可以使用第一个String作为键,并将行添加到可能是Hashmap值的ArrayList,然后将给定类别的所有行添加到ArrayList。

干杯