2013-03-10 2 views
0

Я ищу сортировку контактов, прочитанных из файла в алфавитном порядке по фамилии на консоль? Как я могу это сделать? Контакты уже записаны в файл, начинающийся с фамилии, я просто хочу прочитать их обратно в приложение в алфавитном порядке, когда пользователь хочет просмотреть контакты в консоли.JAVA: Как сортировать строки, считанные из файла, и выводить их на консоль в алфавитном порядке?

// Read from file, print to console. by XXXXX 
      // ---------------------------------------------------------- 
      int counter = 0; 
      String line = null; 

      // Location of file to read 
      File file = new File("contactlist.csv"); 

      try { 

       Scanner scanner = new Scanner(file); 

       while (scanner.hasNextLine()) { 
        line = scanner.nextLine(); 
        System.out.println(line); 
        counter++; 
       } 
       scanner.close(); 
      } catch (FileNotFoundException e) { 

      } 
      System.out.println("\n" + counter + " contacts in records."); 

     } 
     break; 
     // ---------------------------------------------------------- 
     // End read file to console. by XXXX 
+1

При сканировании файла добавьте каждую строку (разумеется, к объекту) в список и отсортируйте список, а затем распечатайте его. –

+0

Насколько велик файл? Допустимо ли загружать все в память? – aymeric

+0

Файл очень маленький. Это похоже на файл размером 200 КБ. Однако, если пользователь может добавить дополнительную информацию в этот файл, он может стать большим файлом. – user2149907

ответ

2

Перед печатью добавить каждую строку отсортированного набора, как TreeSet:

Set<String> lines = new TreeSet<>(); 
while (scanner.hasNextLine()) { 
    line = scanner.nextLine(); 
    lines.add(line); 
    counter++; 
} 

for (String fileLine : lines) { 
    System.out.println(fileLine); 
} 
+0

Дайте это попробовать. – user2149907

+0

Пробовал это. Тем не менее, он говорит, что у меня есть «Duplicate local variable line» и не запускается. Если я переименую строку, я получаю нормальный вывод не в алфавитном порядке. – user2149907

+0

@ user2149907: У набора есть «строки» как имя, а строка имеет «строку». У вас нет опечатки? –

0

имена Чтение из файла, поместите их в объект класса SortedSet.

1
package main.java.com.example; 

import java.io.*; 
import java.net.URL; 
import java.util.Set; 
import java.util.TreeSet; 

public class ReadFromCSV { 
    public static void main(String[] args) { 
     try { 
      final ClassLoader loader = ReadFromCSV.class.getClassLoader(); 
      URL url = loader.getResource("csv/contacts.csv"); 
      if (null != url) { 
       File f = new File(url.getPath()); 
       BufferedReader br = new BufferedReader(new FileReader(f)); 
       Set<String> set = new TreeSet<String>(); 
       String str; 

       while ((str = br.readLine()) != null) { 
        set.add(str); 
       } 

       for (String key : set) { 
        System.out.println(key); 
       } 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}