2016-05-03 3 views
-1

Я пытаюсь сортировать строки в текстовом файле с помощью Android. Вы можете мне помочь? Этот код сортирует часть не всех из них. Я имею в виду, что это вроде 1-2-3-20-4-5-6. Это должно быть 1-2-3-4-5-6-20Сортировка строк ввода в текстовом файле

  try 
      { 

       File root = new File(Environment.getExternalStorageDirectory(), "Notes"); 
       if (!root.exists()) 
       { 
        root.mkdirs(); 
       } 
       File gpxfile = new File(root, fileName); 
       FileWriter writer = new FileWriter(gpxfile,true); 
       writer.append(s+"\n\n"); 
       writer.flush(); 
       writer.close(); 
       FileReader fileReader = new FileReader(gpxfile); 
       BufferedReader bufferedReader = new BufferedReader(fileReader); 
       String inputLine; 
       List<String> lineList = new ArrayList<String>(); 
       while ((inputLine = bufferedReader.readLine()) != null) { 
        lineList.add(inputLine); 
       } 
       fileReader.close(); 
       Collections.sort(lineList); 
       System.out.println(lineList); 
       FileWriter fileWriter = new FileWriter(gpxfile); 
       PrintWriter out = new PrintWriter(fileWriter); 
       for (String outputLine : lineList) { 
        out.println(outputLine); 
       } 
       out.flush(); 
       out.close(); 
       fileWriter.close(); 
       //Toast.makeText(this, "Data has been written to Report File", Toast.LENGTH_SHORT).show(); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
+1

Я подозреваю, что заказ 1-2-20-3-4-5-6 не 1-2-3-20-4-5-6. –

+0

@William_Wilson Это был образец, который может быть, но как я могу его сортировать. – xiac

+0

Как сортировка кода сейчас важна. Если мой предложенный заказ является фактическим выходом, то решение Тима ниже верно и они сортируются как строки вместо цифр. Если вы действительно получаете 3 до 20, то текущая сортировка делает что-то гораздо более странное. –

ответ

2

Вам необходимо отсортировать строки как действительные цифры. Сейчас они сортируются как буквенно-цифровые строки.

public class CustomComparator implements Comparator<String> { 
    @Override 
    public int compare(String s1, String s2) { 
     return Integer.valueOf(s1).compareTo(Integer.valueOf(s2)); 
    } 
} 

Collections.sort(lineList, new CustomComparator()); 

Если по какой-то причине, вы не можете создать новый класс, то вы можете использовать встроенный компаратор:

Collections.sort(lineList, new Comparator<String>() { 
    @Override 
    public int compare(String s1, String s2) { 
     return Integer.valueOf(s1).compareTo(Integer.valueOf(s2)); 
    } 
}); 
+1

java-программирование будет сложным, если вы не можете создавать новые классы ... – njzk2

+0

@ njzk2 Я предполагаю это какой-то (не предназначенный для каламбуров) уступки, и профессор не сказал новых классов. –

0

Чтобы завершить ответ Тима, я предлагаю вам прочитать эту тему: How to use Collections.sort() in JAVA ?

что бы я сделал, заключается в следующем: Вместо Collections.sort(lineList); Я хотел бы использовать lineList.sort(new CustomComparator)

, где

public class CustomComparator implements Comparator<String> { 
    @Override 
    public int compare(String s1, String s2) { 
     return Integer.valueOf(s1).compareTo(Integer.valueOf(s2)); 
    } 
} 

как предлагалось ранее.

Смежные вопросы