zoukankan      html  css  js  c++  java
  • 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的用法和区别,我找到了学姐的一篇博客

  • 相关阅读:
    NSCoder
    OC_NSString、
    OC_内存管理(二)对象复制、循环引用问题、自动释放池
    OC_id类型
    OC_内存管理
    当 IDENTITY_INSERT 设置为 OFF 时,不能向表 '#TT' 中的标识列插入显式值。 sql server 临时表
    c# 访问SQL Server 其他会话正在使用事务的上下文
    EF 中事务的书写
    iis 不能访问json文件
    在开源中国(oschina)git中新建标签(tags)
  • 原文地址:https://www.cnblogs.com/cxgg/p/9064247.html
Copyright © 2011-2022 走看看