2015-10-05 45 views
1

存在一點問題。我已經成功地輸出了一個基於時間戳順序的文件,但是,如果時間戳相同,我嘗試添加的另一個條件也是按字母順序排列。通過Java以某種方式輸出文件

例如:

[TIMESTAMP = 12:30] [EVENT = B]

[TIMESTAMP = 12:30] [EVENT = U]

[TIMESTAMP = 12:30] [EVENT = A]

,我希望它輸出

[TIMESTAMP = 12:30] [EVENT = A]

[TIMESTAMP = 12:30] [EVENT = B]

[TIMESTAMP = 12:30] [EVENT = U]

我此刻當前代碼手段:

package Organiser; 


import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Scanner; 

public class Organiser { 

    public static void main(String[] args) throws FileNotFoundException { 
     ArrayList<String> lines = new ArrayList<>(); 
     String directory = "C:\\Users\\xxx\\Desktop\\Files\\ex1"; 
     Scanner fileIn = new Scanner(new File(directory + ".txt")); 
     PrintWriter out = new PrintWriter(directory + "_ordered.txt"); 

     while (fileIn.hasNextLine() == true) { 
      lines.add(fileIn.nextLine()); 
      Collections.sort(lines); 
      System.out.println("Reading..."); 
     } 

     for (String output : lines) { 
      out.println(output + "\n"); 
     } 

     out.close(); 
     System.out.println("Complete - See " + directory + "_ordered.txt"); 
    } 
} 

任何想法

編輯:這只是樣本數據,我只希望這發生時間戳相同,否則,它會按照時間戳順序相應。

示例文件:

https://www.dropbox.com/s/611psg6qw4nl9pw/ex1.txt?dl=0

回答

1
  1. 你不應該排序您Collection每次你添加一條線!在循環後放Collections.sort(lines);

  2. 生成的代碼應該已經做到了這個訣竅......我已經在我的系統上測試過它,它工作正常!

+0

在我有多個TIMESTAMPS的規模更大的情況下,輸出文件最終將根據EVENT而不是TIME STAMP進行組織。我想保留TIMESTAMP的順序,但是當TIMESTAMP時間相同時,只有EVENT會給它排序。 –

+0

@MubeenHussain這正是發生了什麼......您可能想向我們展示更多信息(例如文件的內容),以便我們可以檢測到會導致問題的其他問題 –

+0

示例文件在這裏:https:// www .dropbox.com/S/611psg6qw4nl9pw/ex1.txt?DL = 0 –

0

它應該在默認情況下發生。 (因爲'U'>'B'>'A')

public static void main(String[] args) { 
     ArrayList<String> lines = new ArrayList<>(); 
     lines.add("[TIMESTAMP = 12:30][EVENT=B]"); 
     lines.add("[TIMESTAMP = 12:30][EVENT=A]"); 
     lines.add("[TIMESTAMP = 12:30][EVENT=U]"); 

     // unsorted 
     System.out.println(lines); 
     // default sorting of Strings will sort A before U 
     Collections.sort(lines); 
     System.out.println(lines); 
    }