根据需求可知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]); } } } } }
测试结果如图:
数组