首页 > 技术文章 > 课上实践练习——MySort

hpl20155329 2017-05-31 15:48 原文

模拟实现Linux下Sort -t : -k 2的功能。参考 Sort的实现。提交码云链接和代码运行截图。

Linux下Sort -t : -k 2的功能

  • sort的工作原理:

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

  • sort的-t选项和-k选项

如果有一个文件的内容是这样:

[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。

,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)
指定了间隔符之后,就可以用-k来指定列数了。

[rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

我们使用冒号作为间隔符,并针对第二列来进行数值升序排序.

题目:

  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 }

代码补充如下

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

        int [] k2 = new int[toSort.length];
        for(int i =0;i<toSort.length;i++){
            String[] div = toSort[i].split(":");//split(regex),参数为要分隔的字符串或者正则表达式

            k2[i]=Integer.parseInt(div[1]);
        }
        Arrays.sort(k2);
        String[] save = new String[k2.length];
        for(int i=0;i<toSort.length;i++)
            for (int k = 0; k < k2.length; k++) {
                if (toSort[i].substring(4,6).equals(String.valueOf(k2[k]))) {
                    save[k]=toSort[i];
                }

            }
        System.out.println();
        System.out.println("After sort:");
        for(int i =0;i<save.length;i++){
            System.out.println(save[i]);
        }
    }
}
  • 运行截图

代码托管

推荐阅读