根據需求可知MySort須要實現相似Linux下Sort -t : -k 2
的功能,在網上查找了一下Sort
命令的功能以及-t
和-k
參數的做用,經查找後瞭解到命令參數的功能以下。html
Sort
命令的做用爲將文本文件內容加以排序,sort可針對文本文件的內容,以行爲單位來排序。-t
參數用於指定排序時所用的欄位分隔字符。-k
參數用於指定按哪一個域的大小關係來進行排序在此我描述的是修改並添加的排序以及輸出部分java
" : "
爲分隔符劃分開來,將全部數據的第二個域的數據保存在兩個存儲空間空間1和空間2。for
語句以及StringTokenizer
類的實例將toSort數組中的每一個字符串以" : "
爲分隔符劃分開來,並將第二個域的數據按順序存入字符串數組sort和temp,其中sort用於存放排序後的順序,temp用於存放排序前的順序。Arrays.sort(sort);
對sort數組進行排序,獲得第二個域的從小到大排序後的順序。import java.util.*; public class MySort { public static void main(String[] args) { int i=0; StringTokenizer fenxi; String tem; String[] toSort = {"aaa:10:1:1", "ccc:30:3:4", "bbb:50:4:5", "ddd:20:5:3", "eee:40:2:20"}; String sort[] = new String[toSort.length]; String temp[] = new String[toSort.length]; System.out.println("Before sort:"); for (String str : toSort) { String con=null; System.out.println(str); fenxi=new StringTokenizer(str,":"); fenxi.nextToken(); con=fenxi.nextToken(); sort[i]=con; temp[i]=con; i++; } Arrays.sort(sort); System.out.println("After sort:"); for(String sor:sort){ for(int k=0;k<toSort.length;k++){ if(temp[k].equals(sor)){ System.out.println(toSort[k]); } } } } }
運行結果如圖:
linux
我在虛擬機下進行了測試,並用args數組將參數-k
指定的區域傳入程序,從而獲得了不一樣的排序結果,經測試所得輸出都符合預期。測試代碼以下:git
import java.util.*; public class MySort { public static void main(String[] args) { int i=0; int mod = Integer.parseInt(args[3])-1; StringTokenizer fenxi; String tem; String[] toSort = {"aaa:10:1:1", "ccc:30:3:4", "bbb:50:4:5", "ddd:20:5:3", "eee:40:2:20"}; String sort[] = new String[toSort.length]; String temp[] = new String[toSort.length]; System.out.println("Before sort:"); for (String str : toSort) { String con=null; System.out.println(str); fenxi=new StringTokenizer(str,":"); for(int p=0;p<mod;p++){ fenxi.nextToken(); } con=fenxi.nextToken(); sort[i]=con; temp[i]=con; i++; } Arrays.sort(sort); System.out.println("After sort:"); for(String sor:sort){ for(int k=0;k<toSort.length;k++){ if(temp[k].equals(sor)){ System.out.println(toSort[k]); } } } } }
測試結果如圖:
數組