2015-04-01 79 views
0

我读了文件,其中每一行看起来是这样的: userNameageaward排序按索引的Java

我需要编程使两个排序类型:by userNameby age。我对第一个没有任何问题,但我不知道如何在这样的例子中按年龄排序.. 我试着在每一行中用年龄切换名称,但它不起作用。 这就是我所(它基本上只是从文件中读取并显示它):

try{ 
      File file=new File(path); 
      BufferedReader read=new BufferedReader(new FileReader(file)); 
      String line=read.readLine(); 
      all+=line+"\n"; 
      while(line!=null){ 
       line=save.readLine(); 
       all+=line+"\n"; 
      } 

      String [] tabUsers=all.split("\n");  




      String display="";    
      for(int a=0;a<tabUsers.length-1;a++){   
       display+=tabUsers[a]+"\n"; 
      } 

      for(int c=0;c<tabUsers.length-1;c++){ 
        System.out.println(tabUsers[c]); 

     } 


     } 
     catch(Exception ex){ 

     } 

任何想法?

我已经试过这一点,但没有奏效:

for(int b=0;b<tabUsers.length-1;b++){ 
       String eachLine =tabUsers[b]; 
       String [] splitLine=eachLine.split(","); 
       splitLine[0]=splitLine[1]; 
      } 
+1

你是什么意思“我知道按姓名排序......但我不按年龄排序”。我只是没有看到它在'String'上对_alphabetically_进行排序所产生的差异,或者只是通过'int'上的自然顺序关系来进行排序......?你能说出你在做什么吗? – 2015-04-01 11:38:30

+0

至于名字我简单地使用这行:Arrays.sort(tabUsers,0,tabUsers.length-1); – chatteVerte 2015-04-01 11:43:28

+0

您是否尝试过分割每一行并获取它们的年龄?如果你有它,你可以用它来排序,对吧? – 2015-04-01 11:48:47

回答

0

首先从每一行获取姓名和年龄。然后你可以把东西放在两个treeMaps,一个名字键和其他Age键上。例如:

String[] lines = new String[3]; 
    lines[0] = "Michael 25 Award_1"; 
    lines[1] = "Ana 15 Award_2"; 
    lines[2] = "Bruno 50 Award_3"; 

    String[] parts; 
    Map<String, String> linesByName = new TreeMap<String, String>();   
    Map<Integer, String> linesByAge = new TreeMap<Integer, String>(); 

    for (String line : lines) { 
     parts = line.split(" "); 
     linesByName.put(parts[0], line); 
     linesByAge.put(Integer.parseInt(parts[1]), line); 
    } 

    System.out.println("Sorted by Name:"); 

    for (Map.Entry<String, String> entry : linesByName.entrySet()) { 
     System.out.println(entry.getValue()); 
    } 

    System.out.println("\nSorted by Age:"); 

    for (Map.Entry<Integer, String> entry : linesByAge.entrySet()) { 
     System.out.println(entry.getValue()); 
    } 
1

读取数据到对象的集合是这样的:

public class User { 
    final String name; 
    final int age; 
    final String award; 

    public User(String name, int age, String award) { 
     this.name = name; 
     this.age = age; 
     this.award = award; 
    } 
} 

然后使用Collections.sortComparator<User>排序:

User bob = new User("Bob", 44, null); 
User zack = new User("Zack", 13, null); 
List<User> users = Arrays.asList(bob, zack); 

//sort by age 
Collections.sort(users, new Comparator<User>() { 
    @Override 
    public int compare(User user1, User user2) { 
     return Integer.compare(user1.age, user2.age); 
    } 
}); 

//sort by name 
Collections.sort(users, new Comparator<User>() { 
    @Override 
    public int compare(User user1, User user2) { 
     return user1.name.compareTo(user2.name); 
    } 
});