20165215 MySort的实现

本文介绍了一个简单的Java程序,用于模拟Linux下Sort命令的-t和-k参数功能,即按指定分隔符和列号进行排序。文章包括了伪代码、产品代码及测试代码,并通过实例展示了如何实现对字符串数组按第二列的数值排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySort的实现

要求

  • 模拟实现Linux下Sort -t : -k 2的功能

  • 要有伪代码,产品代码,测试代码(注意测试用例的设计)

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

相关知识点

sort

  • 工作原理:从每个比较单元的首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出
  • 相关命令行
    • -u:在输出中去除重复行
    • -r:将输出改为降序排列
    • -n:以数值来进行排序,避免出现10比2小的错误
    • -t -k n:当输入有多列时,表示输出将按第n列的数值进行排序
    • -f:忽略大小写进行比较
    • -b:从第一个可见字符开始比较
    • -C:检查文件是否已排好序,如果乱序则返回1
  • 因此对以上模板执行sort -t : -k 2,就是要实现对使用“:”分隔的第二列字符串按照从小到大的顺序重新排列的功能

split

  • public String[] split(String regex):一个String类的数组以regex传入的分隔符为标准,对字符串进行分隔,使用时分隔符要放在双括号中

1296679-20180521120032239-772168062.jpg

代码

  • 伪代码
将tosort数组以第二列数值大小为标准从小到大排列:
新建数组a,长度与tosort数据长度相同
调用split函数将tosort数组以:(冒号)为分隔符分成小字符串
将每一个tosort元素的第二例数值存入数组a中
调用Arrays类的sort函数对a进行排序
使用嵌套循环输出排序后的结果
  • 产品代码
package week12;
import java.util.*;
import java.lang.Integer;
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 [] a = new int[toSort.length];
        for (int i = 0; i < toSort.length; i++){
            String [] tmp = toSort[i].split(":");
            a[i] = Integer.parseInt(tmp[1]);
        }
        Arrays.sort(a);
        System.out.println("After sort:");
        for (int i = 0; i < a.length; i++)
            for (int j = 0; j < toSort.length; j++)
                if (a[i] == Integer.parseInt((toSort[j].split(":"))[1]))
            System.out.println(toSort[j]);
    }
}

运行结果

1296679-20180521120020812-914577760.png

测试结果

1296679-20180521132512823-718926654.png

转载于:https://www.cnblogs.com/fyss/p/9065173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值