實現Linux下Sort -t : -k 2的功能java
Sort -t : -k 2
:即要求以冒號做爲分隔符,給定數據的第二個區域的升序排列爲標準,對輸入數據進行排序。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
產品代碼:對關鍵代碼解釋在註釋中均已給出,這裏就不做重複說明數組
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(); } }