根据需求可知MySort需要实现类似Linux下Sort -t : -k 2
的功能,在网上查找了一下Sort
命令的功能以及-t
和-k
参数的作用,经查找后了解到命令参数的功能如下。
Sort
命令的作用为将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。-t
参数用于指定排序时所用的栏位分隔字符。-k
参数用于指定按哪个域的大小关系来进行排序在此我描述的是修改并添加的排序以及输出部分
" : "
为分隔符划分开来,将所有数据的第二个域的数据保存在两个存储空间空间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]);
}
}
}
}
}
运行结果如图:
我在虚拟机下进行了测试,并用args数组将参数-k
指定的区域传入程序,从而得到了不同的排序结果,经测试所得输出都符合预期。测试代码如下:
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]);
}
}
}
}
}
测试结果如图:
原文:https://www.cnblogs.com/nameless-student/p/10886209.html