MySort
一、设计思路
确定MySort的要求
根据需求可知MySort需要实现类似Linux下Sort -t : -k 2
的功能,在网上查找了一下Sort
命令的功能以及-t
和-k
参数的作用,经查找后了解到命令参数的功能如下。
Sort
命令的作用为将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。-t
参数用于指定排序时所用的栏位分隔字符。-k
参数用于指定按哪个域的大小关系来进行排序
本项目老师提供了参考代码,提供了需要排序的数组以及整个程序的运行流程,而依据老师提供的代码以及题目要求,我们需要自行添加以冒号作为分隔符,根据给定数据的第二个域的大小关系,对数组进行排序。
伪代码
在此我描述的是修改并添加的排序以及输出部分
- 1、排序:对需要排序的数组进行遍历,并把其中的数据以
" : "
为分隔符划分开来,将所有数据的第二个域的数据保存在两个存储空间空间1和空间2。 - 2、输出排序后的顺序:将升序排序后的空间1中的数据进行遍历,按顺序取得其中的数据,并根据该数据找到其在空间2中的位置,并以此位置找到需要排序的数组中的数据并进行输出。
实现步骤
- 1、使用
for
语句以及StringTokenizer
类的实例将toSort数组中的每个字符串以" : "
为分隔符划分开来,并将第二个域的数据按顺序存入字符串数组sort和temp,其中sort用于存放排序后的顺序,temp用于存放排序前的顺序。 - 2、使用
Arrays.sort(sort);
对sort数组进行排序,得到第二个域的从小到大排序后的顺序。 - 3、遍历sort数组,取得其中的每个字符串,并将该字符串与temp中的字符串进行匹配,如有相同记录temp数组的下标,并输出该下标的toSort数组中的字符串,从而完成对排序后顺序的输出。
产品代码如下:
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]);
}
}
}
}
}
测试结果如图: