2017-02-13 1 views
0

Ich versuche, eine Textdatei zu sortieren, die durch Tabulatoren getrennt ist und versucht, nach dem dritten Feld className zu sortieren. Ich werde es dann in einer Tabelle anzeigen. Ich habe den folgenden Teil geschrieben, aber er sortiert nicht richtig. Irgendwelche Ideen, wo ich falsch liege?Vergleichen mit Collections.sort

public void sortFile(){ 
    BufferedReader reader = null; 
    BufferedWriter writer = null; 

    //Create an ArrayList object to hold the lines of input file 
    ArrayList<String> lines = new ArrayList<>(); 


    try{ 
     //Creating BufferedReader object to read the input file 
     reader = new BufferedReader(new FileReader("pupilInfo.txt")); 
     //Reading all the lines of input file one by one and adding them into ArrayList 
     String currentLine = reader.readLine(); 
     while (currentLine != null){ 
      lines.add(currentLine); 
      currentLine = reader.readLine(); 
     } 


      Collections.sort(lines, (String s1, String s2) -> { 
      s1 = lines.get(0); 
      s2 = lines.get(1); 
      String [] line1 = s1.split("\t"); 
      String [] line2 = s2.split("\t"); 
      String classNameLine1 = line1[2]; 
      String classNameLine2 = line2[2]; 
      System.out.println("classname1=" + classNameLine1); 
      System.out.println("classname2=" + classNameLine2); 
      int sComp = classNameLine1.compareTo(classNameLine2); 
      return sComp; 
     }); 
     //Creating BufferedWriter object to write into output temp file 
     writer = new BufferedWriter(new FileWriter("pupilSortTemp.txt")); 
     //Writing sorted lines into output file 
     for (String line : lines){ 
      writer.write(line); 
      writer.newLine(); 
     }    
    }catch (IOException e){ 
    } 
    finally{ 
    //Closing the resources 
     try{ 
      if (reader != null){ 
       reader.close(); 
      } 
      if(writer != null){ 
       writer.close(); 
      } 
     }catch (IOException e){ 
     } 
    } 

} 
+2

's1 = Zeilen.get (0); s2 = lines.get (1); 'Was zum Teufel machst du? – user2357112

+0

Wenn Sie die zwei Zeilen löschen, die @ user2357112 identifiziert hat, wäre es ein guter Anfang, Ihr Problem zu beheben. –

+0

Der Komparator, den Sie an 'Collections.sort' übergeben, wird bereits in den Zeichenfolgen übergeben, die verglichen werden sollen (von Ihrer ArrayList ), Sie müssen sie also nicht manuell festlegen. Darüber hinaus überschreiben Sie tatsächlich die korrekten Werte, die an den Komparator übergeben werden. –

Antwort

1

I'ava versucht, mit "Komparator" .für Einfachheit meine Quelldatei

pippo;pluto;paperino 
casa;terra;cortile 
primo;secondo;terzo 

Comparator<String> comparator = new Comparator<String>() { 
       @Override 
       public int compare(String o1, String o2) { 
        return o1.split(";")[2].compareTo(o2.split(";")[2]); 

       } 
      }; 

      lines.sort(comparator); 
wie folgt

[casa;terra;cortile, pippo;pluto;paperino, primo;secondo;terzo] 

auf dem dritten Feld sortiert ist die endgültige Ausgabe!

+0

Vielen Dank für die freundliche Antwort auf meine Frage. Diese Option funktioniert für mich. – Dante

Verwandte Themen