2017-2018-2 20165312 课下选做 MySort

2017-2018-2 20165312 课下选做 MySort

题目描述

模拟实现Linux下Sort -t : -k 2的功能,参考 Sort的实现。

import java.util.*;
   public class MySort1 {
       public static void main(String [] args) {
           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);
      }
  }

首先利用API查找sort的用法

我认为比较常用的就是框中的两个方法

  • 语法: sort(选项)(参数)
  • 常用选项:
    • -b:忽略每行前面开始出的空格字符;
    • -c:检查文件是否已经按照顺序排序;
    • -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
    • -f:排序时,将小写字母视为大写字母;
    • -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
    • -k:排序时,指定本域的开头和结尾;
    • -m:将几个排序号的文件进行合并;
    • -M:将前面3个字母依照月份的缩写进行排序;
    • -n:依照数值的大小排序;
    • -o<输出文件>:将排序后的结果存入制定的文件;
    • -r:以相反的顺序来排序;
    • -t<分隔字符>:指定排序时所用的栏位分隔字符;
    • +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

所以很容易的分析出Sort -t : -k 2是按照正数第二列的数据大小进行从小到大的排序。

想要将toSort[]数组中一个元素中的第二列分离出来,想到了使用spilt()方法。先使用API了解

同时参考了娄老师的博客中讲解String的方法,写出了MySort.java

import java.util.*;
public class MySort {
    public static void main(String [] args) {
        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);
        Integer[] tmp = new Integer[toSort.length]; //定义一个存放int型数据的数组
        for (int i = 0; i < tmp.length; i++) {
            tmp[i] = new Integer(Integer.parseInt(toSort[i].split(":")[1]));  //将toSort数组的元素按照“:”分隔,并将数组第二位的数字存放入tmp数组中
            //由于toSort数组中为String类型 所以需要类型转换
        }
        Arrays.sort(tmp);//将第二列的进行排序
        System.out.println("After sort:");
        for (int i = 0; i < tmp.length; i++) {
            for (int j = 0; j < toSort.length; j++) {
                if (Integer.parseInt(toSort[j].split(":")[1]) == tmp[i].intValue())  //判断两者是否相等
                    System.out.println(toSort[j]);  //输出整行
            }
        }
    }
}

运行截图

由于toSort数组为String类型,这就涉及到数据类型转换的问题,有关intInteger的用法和区别,我找到了学姐的一篇博客

原文地址:https://www.cnblogs.com/cxgg/p/9064247.html