学号20175313 《实现Linux下Sort -t : -k 2功能》第十二周

一、题目要求

实现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();
    }
}

五、代码链接

六、运行结果截图

七、参考资料

猜你喜欢

转载自www.cnblogs.com/xiannvyeye/p/10883003.html