一、题目要求
模拟实现Linux下Sort -t : -k 2的功能。
要有伪代码,产品代码,测试代码(注意测试用例的设计)
二、题目信息
题目中给的一段代码模型:
1 import java.util.*;
2
3 public class MySort1 {
4 public static void main(String [] args) {
5 String [] toSort = {"aaa:10:1:1",
6 "ccc:30:3:4",
7 "bbb:50:4:5",
8 "ddd:20:5:3",
9 "eee:40:2:20"};
10
11 System.out.println("Before sort:");
12 for (String str: toSort)
13 System.out.println(str);
14
15 Arrays.sort(toSort);
16
17 System.out.println("After sort:");
18 for( String str : toSort)
19 System.out.println(str);
20 }
21 }
要求实现Sort -t : -k 2的功能
- -t 分隔符,将每一行数据按照该选项指定的分隔符分成多个域。默认情况下是使用tab键或者空格符来分割的。
- -k 指定用哪个域的数据来进行排序
- Sort -t : -k 2:即要求以冒号作为分隔符,给定数据的第二个区域的升序排列为标准,对输入数据进行排序。
三、解题思路
伪代码:
- 用split方法将tosort以冒号分割为四组
- 将第二组储存进数组K
- 遍历数组获取元素个数
- 对K数组进行arrays方法重新排序
- 排序后按照新K对原数组进行排列
- 输出新字符组
产品代码:
package Mysort;
import com.sun.jdi.ArrayReference;
import java.util.*;
public class mysortable {
public void mySort(String []toSort){
System.out.println("Before sort:");
for (String str : toSort) {
System.out.println(str);
}
int[] k = new int [toSort.length];
for (int i = 0; i < toSort.length; i++) {
String[] tmp = toSort[i].split(":");
k[i] = Integer.parseInt(tmp[1]);
}
System.out.println("After sort:");
Arrays.sort(k);
for (int i = 0; i < k.length; i++) {
for (int j = 0; j < toSort.length; j++){
if (k[i] == Integer.parseInt((toSort[j].split(":"))[1])) {
System.out.println(toSort[j]);
}
}
}
}
}
测试代码:
import Mysort.mysortable;
public class testMysort {
public static void main(String[] args) {
mysortable sort1 = new mysortable();
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);
System.out.println();
}
}
四、实验截图
五、码云链接
https://gitee.com/ShengHuoZaiDaXue/20175301/tree/master/20175301/Mysort