一、题目要求
实现Linux下Sort -t : -k 2的功能
二、题目理解:
- -t 分隔符,将每一行数据按照该选项指定的分隔符分成多个域。默认情况下是使用tab键或者空格符来分割的。
- -k 指定用哪个域的数据来进行排序
Sort -t : -k 2
:即要求以冒号作为分隔符,给定数据的第二个区域的升序排列为标准,对输入数据进行排序。
三、设计思路
- 参数args[0]为用户指定作为排序标准的区域
- 用public String[]split(String regex)方法对所给字符序列进行分解
- 将分解后的arges[0]区域所包含的内容存储到k3数组中
- 调用Arrays类里面的sort方法,对指定区域进行排序,即对k3数组进行排序
- 通过遍历的方法寻找toSort数组指定区域与排好序后的k3[i]相等的toSort[j],然后将其输出
四、代码实现
- 根据已知代码模型在此基础上进行分析,写出关键部分代码:
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);
}
}
}
伪代码:
- 遍历toSort这个数组,将每个字符串按照冒号进行分隔,分隔后得到的字符串保留在temp中
- 用k3数组保存指定区域所含的内容
- 遍历完后,对k3进行升序排列
- 升序输出以args[0]为关键字的toSort排序
- 寻找k3[i]相等的关键字所在的字符串位置
- 当找到之后就输出toSort
- 否则就继续遍历toSort这个数组
产品代码:对关键代码解释在注释中均已给出,这里就不作重复说明
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();
}
}
五、代码链接
六、运行结果截图
七、参考资料
- 《Java2实用教程(第五版)》
- JDKTM 6 Documentation