學號20175313 《實現Linux下Sort -t : -k 2功能》第十二週

1、題目要求

實現Linux下Sort -t : -k 2的功能java

2、題目理解

  • -t 分隔符,將每一行數據按照該選項指定的分隔符分紅多個域。默認狀況下是使用tab鍵或者空格符來分割的。
  • -k 指定用哪一個域的數據來進行排序
  • Sort -t : -k 2:即要求以冒號做爲分隔符,給定數據的第二個區域的升序排列爲標準,對輸入數據進行排序。

3、設計思路

  • 參數args[0]爲用戶指定做爲排序標準的區域
  • 用public String[]split(String regex)方法對所給字符序列進行分解
  • 將分解後的arges[0]區域所包含的內容存儲到k3數組中
  • 調用Arrays類裏面的sort方法,對指定區域進行排序,即對k3數組進行排序
  • 經過遍歷的方法尋找toSort數組指定區域與排好序後的k3[i]相等的toSort[j],而後將其輸出

4、代碼實現

  • 根據已知代碼模型在此基礎上進行分析,寫出關鍵部分代碼:
import java.util.*;
public class MySort {
    public static void main(String[] args) {
        int field = Integer.parseInt(args[0])-1;
        String[] toSort = {"aaa:10:1:1",
                "ccc:30:3:4",
                "bbb:50:4:5",
                "ddd:20:5:3",
                "eee:40:2:20"};
        System.out.println("Before sort:");
        for (String str : toSort) {
            System.out.println(str);
        }
       
        Arrays.sort(toSort);
        System.out.println("After sort:");
        for (String str : toSort) {
            System.out.println(str);
        }
    }
}

僞代碼git

  • 遍歷toSort這個數組,將每一個字符串按照冒號進行分隔,分隔後獲得的字符串保留在temp中
  • 用k3數組保存指定區域所含的內容
  • 遍歷完後,對k3進行升序排列
  • 升序輸出以args[0]爲關鍵字的toSort排序
    • 尋找k3[i]相等的關鍵字所在的字符串位置
    • 當找到以後就輸出toSort
    • 不然就繼續遍歷toSort這個數組

產品代碼:對關鍵代碼解釋在註釋中均已給出,這裏就不做重複說明數組

import java.util.*;
public class MySort {
    public static void main(String[] args) {
        int field = Integer.parseInt(args[0])-1;
        String[] toSort = {"aaa:10:1:1",
                "ccc:30:3:4",
                "bbb:50:4:5",
                "ddd:20:5:3",
                "eee:40:2:20"};
        System.out.println("Before sort:");
        for (String str : toSort) {
            System.out.println(str);
        }
        int[] k3 = new int[toSort.length];
        for (int i = 0; i < toSort.length; i++) {//遍歷toSort這個數組,將每一個字符串按照冒號進行分隔,分隔後獲得的字符串保留在tmp中
            String[] tmp = toSort[i].split(":");
            k3[i] = Integer.parseInt(tmp[field]);//求field的所對應的值
        }
        Arrays.sort(k3);//對k3進行升序排列,要求按照第二個field進行排序,因此上面k3應該保留的是第二個field的值
        System.out.println("After sort:");
        //Arrays.sort(k3);
        for (int i = 0; i < k3.length; i++) {//升序輸出以field爲關鍵字的toSort排序,因此下面就是尋找k3[i]相等的關鍵字所在的字符串位置
            for (int j = 0; j < toSort.length; j++){
                if (k3[i] ==Integer.parseInt((toSort[j].split(":"))[field])) {//當k3[i]等於temp[field]裏面的數值時,輸出,
                    // 可是因爲temp是一個一直變化的,因此只能從新進行temp數組的生成過程
                    System.out.println(toSort[j]);
                }
            }
        }
    }
}

測試代碼:我是直接將主類改爲單元,而後調用該單元對其進行測試測試

public class testMysort {
    public static void main(String[] args) {
        mysort3 sort1 = new mysort3();
        String[] toSort = {"aaa:10:1:1",
                "ccc:30:3:4",
                "bbb:50:4:5",
                "ddd:20:5:3",
                "eee:40:2:20"};
        sort1.mySort(toSort,1);
        System.out.println();
        sort1.mySort(toSort,3);
        System.out.println();
    }
}

5、代碼連接

6、運行結果截圖

7、參考資料

相關文章
相關標籤/搜索