MySort

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]);
                    }
                }
            }
        }
}

测试结果如图:

三、码云代码

MySort
MySortTest

、参考资料

posted @ 2019-05-19 21:28  175320  阅读(239)  评论(0编辑  收藏  举报