簡體   English   中英

Java,對txt文件中的數據進行排序和顯示

[英]Java, sort and display data from txt file

我是Java的新手,在完成一項任務時遇到了一些麻煩。 我有看起來像這樣的txt文件:

John Doe,01-01-1980,Development,Senior Developer
Susan Smith,07-12-1983,Development,Head of Development
Ane Key,06-06-1989,BA,Junior Analyst
Nina Simone,21-09-1979,BA,Head of BA
Tom Popa,23-02-1982,Development,Developer
Tyrion Lannyster,17-03-1988,BA,Analyst

我想按部門分類。 例如:成員是:

[Employee Full Name] - [Employee Age] - [Employee Position] - [Employee Salary(default value x)]

部門:發展部成員:Susan Smith ...... John Doe……Tom Popa……部門:BA成員:Nina Simone ....... Ane Key ... ........ Tyrion Lannyster ........

最初讀取文件並制作2D數組,但無法繼續如何正確對其進行排序。

public static void main(String[] args) {

    String csvFile = "C:\\Employees.txt";
    BufferedReader br = null;
    String line = "";
    String SplitBy = ",";

    String myArray[][] = new String[6][5];
    int row = 0;

    try {
        br = new BufferedReader(new FileReader(csvFile));

        while ((line = br.readLine()) != null) {  

            String nums[] = line.split(SplitBy);

        for (int col = 0; col < nums.length; col++){

                String n =nums[col];

                myArray[row][col] = n;
           //     System.out.println(n);
            }               
            row++;



        }

              } 

    catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }



}

Java Collections API允許您以及util.Arrays進行排序。 您將需要用於代碼的arrays方法,但請考慮移至某種Collection。 也許從列表開始。

最簡單的方法是將行的內容放入Java Bean中,然后使用sort對其進行排序。

public User { 
    private String name;
    // ... all the fields with getters and setters
}

然后將您的代碼修改為如下所示:

// create a nice List for the users.
List<User> userList = new ArrayList<>();

while ((line = br.readLine()) != null) {
            User user = new User();
            String nums[] = line.split(SplitBy);
            user.setName(nums[0]);
            // create nice method to convert String to Date
            user.setDate(convertStringToDate(nums[1]));
            // add the user to the list
            userList.add(user);

}

// Then finally sort the data according to the desired field.
Arrays.sort(userList, (a,b) -> a.name.compareTo(b.name));

在此處提供代碼解決方案不會幫助您學習。 但我可以給您提示如何進行。 確實不建議使用數組。

簡單但骯臟的方式-

代替二維數組,請使用TreeMap<String, String[]> ,其中key是與名稱連接的部門,value是個人詳細信息的一維數組。 當我們使用TreeMap ,結果自然地根據Department后面跟人的名字進行排序。 遍歷entrySet並打印所有結果。

正確的路 -

用所需的所有成員定義新對象Person 實現Comparable接口。 讀取所有輸入數據,在Person對象中填充相同的數據,在ArrayList添加每個此類對象,然后使用Collections API的sort方法對所有對象進行排序。 另外,您可以采用Comparator方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM