1. 输入n,然后连续输入n个身份证号。
  2. 然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
    输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
    输入sort2,将所有身份证按照里面的年月日升序输出。

注意:处理输入的时候,全部使用ScannernextLine()方法,以免出错。

输入样例:

6
410425198309308225
320203197206115011
431227196108033146
330226196605054190
34080019810819327X
320111197112301539
sort1
sort2
e

输出样例:

1961-08-03
1966-05-05
1971-12-30
1972-06-11
1981-08-19
1983-09-30
431227196108033146
330226196605054190
320111197112301539
320203197206115011
34080019810819327X
410425198309308225
exit

代码如下:

import java.util.Scanner;
import java.util.Arrays;
import java.util.Comparator;
public class Main{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=Integer.parseInt(sc.nextLine());
        String[] container=new String[n];
        for(int i=0;i<n;i++)
        {
            container[i]=sc.nextLine();
        }
         while(true)
         {
            String choice=sc.nextLine();
            if("sort1".equals(choice)){
                    String[] birthdays=new String[n];
                    for(int i=0;i<n;i++)
                    {
                        String year=container[i].substring(6,10);
                        String month=container[i].substring(10,12);
                        String day=container[i].substring(12,14);
                        birthdays[i]=year+"-"+month+"-"+day;
                    }
                    Arrays.sort(birthdays);
                    for(String b:birthdays){
                        System.out.println(b);
                    }
                }else if("sort2".equals(choice))
                {
                    String[] sortedIds=container.clone();
                    Arrays.sort(sortedIds,new Comparator<String>()
                                {
                        public int compare(String id1,String id2)
                        {
                            String birth1=id1.substring(6,14);
                            String birth2=id2.substring(6,14);
                            return birth1.compareTo(birth2);
                        }
                    });
                    for(String id:sortedIds){
                        System.out.println(id);
                    }
                }else{
                    System.out.println("exit");
                    break;
                }
            }
        sc.close();
    }
}

学习心得:

1、数组的 clone() 方法:用来创建一个与原数组长度相同、内容完全一致的新数组。

2、 Java 的 Arrays.sort()(自定义 Comparator)与 C 语言的 qsort(compare 函数)作用非常相似,都是通过传入 “比较规则” 来实现自定义排序。

Arrays.sort() 方法的语法格式:

Arrays.sort(要排序的数组, 比较器);
// 对应我的代码:
Arrays.sort(sortedIds, new Comparator<String>() { ... });

第一个参数:sortedIds 是要排序的数组。
第二个参数:new Comparator<String>() { ... } 是 “比较器”,一个包含比较规则的对象。

Comparator 是接口,不能直接用,必须用 new 创建具体的对象才能使用。

<>里的内容要和我们所要比较的对象的类型一致。比如我这里比较的是字符串的大小,所以是<String>。

创建对象的同时,要直接把 compare 的内容也直接写出来。

new Comparator<类型>() {
    // 必须实现compare方法,内容就是比较规则
    public int compare(类型 a, 类型 b) { 
        // 比较逻辑,返回负数/0/正数
    }
};

最后,因为这个 “比较器对象” 是作为参数传给 Arrays.sort 的,所以整个new Comparator...都要放在 Arrays.sort 的参数里,用右括号闭合。

更多推荐