一、题目要求

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

二、题目理解

  • -t 分隔符,将每一行数据按照该选项指定的分隔符分成多个域。默认情况下是使用tab键或者空格符来分割的。
  • -k 指定用哪个域的数据来进行排序
  • Sort -t : -k 2:即要求以冒号作为分隔符,给定数据的第二个区域的升序排列为标准,对输入数据进行排序。

三、设计思路

  • 参数args[0]为用户指定作为排序标准的区域
  • 用public String[]split(String regex)方法对所给字符序列进行分解
  • 将分解后的arges[0]区域所包含的内容存储到k3数组中
  • 调用Arrays类里面的sort方法,对指定区域进行排序,即对k3数组进行排序
  • 通过遍历的方法寻找toSort数组指定区域与排好序后的k3[i]相等的toSort[j],然后将其输出

四、代码实现

  • 根据已知代码模型在此基础上进行分析,写出关键部分代码:
import java.util.*;
public class MySort {
public static void main(String[] args) {
int field = Integer.parseInt(args[0])-1;
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);
}
}
}

伪代码:

  • 遍历toSort这个数组,将每个字符串按照冒号进行分隔,分隔后得到的字符串保留在temp中
  • 用k3数组保存指定区域所含的内容
  • 遍历完后,对k3进行升序排列
  • 升序输出以args[0]为关键字的toSort排序
    • 寻找k3[i]相等的关键字所在的字符串位置
    • 当找到之后就输出toSort
    • 否则就继续遍历toSort这个数组

产品代码:对关键代码解释在注释中均已给出,这里就不作重复说明

import java.util.*;
public class MySort {
public static void main(String[] args) {
int field = Integer.parseInt(args[0])-1;
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[] k3 = new int[toSort.length];
for (int i = 0; i < toSort.length; i++) {//遍历toSort这个数组,将每个字符串按照冒号进行分隔,分隔后得到的字符串保留在tmp中
String[] tmp = toSort[i].split(":");
k3[i] = Integer.parseInt(tmp[field]);//求field的所对应的值
}
Arrays.sort(k3);//对k3进行升序排列,要求按照第二个field进行排序,所以上面k3应该保留的是第二个field的值
System.out.println("After sort:");
//Arrays.sort(k3);
for (int i = 0; i < k3.length; i++) {//升序输出以field为关键字的toSort排序,所以下面就是寻找k3[i]相等的关键字所在的字符串位置
for (int j = 0; j < toSort.length; j++){
if (k3[i] ==Integer.parseInt((toSort[j].split(":"))[field])) {//当k3[i]等于temp[field]里面的数值时,输出,
// 但是由于temp是一个一直变化的,所以只能重新进行temp数组的生成过程
System.out.println(toSort[j]);
}
}
}
}
}

测试代码:我是直接将主类改成单元,然后调用该单元对其进行测试

public class testMysort {
public static void main(String[] args) {
mysort3 sort1 = new mysort3();
String[] toSort = {"aaa:10:1:1",
"ccc:30:3:4",
"bbb:50:4:5",
"ddd:20:5:3",
"eee:40:2:20"};
sort1.mySort(toSort,1);
System.out.println();
sort1.mySort(toSort,3);
System.out.println();
}
}

五、代码链接

六、运行结果截图

七、参考资料

学号20175313 《实现Linux下Sort -t : -k 2功能》第十二周的更多相关文章

  1. 学号20175313 《实现Linux下cp XXX1 XXX2的功能(一)》第九周

    目录 MyCP 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.伪代码分析 六.代码链接 七.代码实现过程中遇到的问题 八.运行结果截图 九.参考资料 MyCP 一.题目要求 编写MyCP ...

  2. 学号20175313 《实现Linux下cp XXX1 XXX2的功能(二)》第九周

    目录 MyCP2 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.伪代码分析 六.代码链接 七.代码实现过程中遇到的问题 八.运行结果截图 九.心得体会 十.参考资料 MyCP2 一.题目 ...

  3. linux下sort命令使用详解---linux将文本文件内容加以排序命令

    转载自:http://www.cnblogs.com/hitwtx/archive/2011/12/03/2274592.html linux下sort命令使用详解---linux将文本文件内容加以排 ...

  4. 补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能

    蓝墨云班课 编写MyCP.java 要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX ...

  5. 《Linux下cp XXX1 XXX2的功能》的实现

    <Linux下cp XXX1 XXX2的功能>的实现 一.题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyC ...

  6. 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能

    题目:编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能 要求:MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为十 ...

  7. 20175303 Mycp实现Linux下cp xxx1 xxx2的功能

    20175303 Mycp实现Linux下cp xxx1 xxx2的功能 一.题目要求 编写MyCP2.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP2支持两个参数: ja ...

  8. 2017-2018-1 《Linux内核原理与设计》第十二周作业

    <linux内核原理与设计>第十二周作业 Sql注入基础原理介绍 分组: 和20179215袁琳完成实验 一.实验说明   SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这 ...

  9. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...

随机推荐

  1. Go part 5 结构体,方法与接收器

    结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...

  2. Laravel with 查询指定的字段(非复制的哦)

    问题: 在with里面指定查询字段,结果是null. 在模型里面指定查询字段,结果是null. 解决办法: 在查询指定字段的时候要顺带着查询关联的外键,例: // user 表 id name // ...

  3. Python Selenium、PIL、pytesser 识别验证码

    思路: 使用Selenium库把带有验证码的页面截取下来 利用验证码的xpath截取该页面的验证码 对验证码图片进行降噪.二值化.灰度化处理后再使用pytesser识别 使用固定的账户密码对比验证码正 ...

  4. g++ 生成C++ .so库文件,并调用示例

    Tags: g++ C++ so library   在Linux系统下用g++命令编译C++程序.也可以生成so,a链接库   示例一 编译时链接so库 Test.h 文件内容   Main.cpp ...

  5. JavaScript--Function对象(函数)的声明和作用域

    Funtion 封装了可重复使用的代码块对象,函数名是一个引用函数对象的变量 声明提前:在程序开始执行之前,将var 变量和function函数提前声明 但赋值并不会提前 它的三种创建方法: 创建1 ...

  6. iOS圆弧渐变进度条的实现

    由于项目需要一个环形渐变进度条显示课程,这方便网上的确有很多相关资料但是,都是比较零散的而且,大多数只是放一堆代码就算完了.这里我想详细写一篇我自己实现这个进度条的过程. 实现一个圆弧进度条主要分为三 ...

  7. SuperMemo method

    原文:https://www.supermemo.com/en/archives1990-2015/english/ol/sm2 别人的研究:http://wdxtub.lofter.com/post ...

  8. TLS1.3&TLS1.2形式化分析(二)

    1.下面是TLS1.2和TLS1.3握手协议过程 ,明显的可以看出存在不同 . 我们先说TLS1.2的握手过程明显是比TLS1.3的握手过多了一次.在TLS1.3中舍弃了之前RSA的协商过程,然后基于 ...

  9. FPGA学习笔记——点亮LED

    软件平台:win7(64bit) + Quartus II 9.1 (64-Bit) 硬件平台:东理电子Easy-FPGA Cyclone II EP2C5T114C8N 这个开发板买了很长时间了,买 ...

  10. 关于在window8上使用ssh命令的记录

    1.开启虚拟机以及git bash窗口,准备连接 2.在虚拟机中输入ifconfig -a查看虚拟机ip 从图中找到ip为 : inet 地址:192.168.78.133 3.输入命令: ssh r ...