- 输入n,然后连续输入n个身份证号。
- 然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
输入sort2,将所有身份证按照里面的年月日升序输出。
**注意:处理输入的时候,全部使用Scanner的nextLine()**方法,以免出错。
输入样例:
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.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
String[] caridS = new String[n];
for(int i=0;i<n;i++) {
String carIdString = scan.next();
caridS[i] = carIdString;
}
Comparator<String> com = new MyComparator();
Arrays.sort(caridS,com);
boolean loop = true;
while(loop) {
String inputString = scan.next();
switch (inputString) {
case "sort1":
for (String carid : caridS) {
System.out.println(carid.substring(6, 10)+"-"+carid.substring(10, 12)+"-"+carid.substring(12,14));
}
break;
case "sort2":
for (String carid : caridS) {
System.out.println(carid);
}
break;
default:
System.out.println("exit");
loop = false;
break;
}
}
}
}
class MyComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return o1.substring(6, 15).compareTo(o2.substring(6, 15));
}
}
总结:
本题技术难点在于对字符串的排序,我使用的是
Arrays.sort(caridS,com);
方法对字符串进行排序,Arrays.sort只传入一个数组时会是对每一个元素进行排序,但是我要的是对每一个身份证上的出生年月进行排序,所以我通过创建MyComparator 类的方式自定义排序了数组。Arrays.sort三种用法可查看https://blog.csdn.net/vvcbvv/article/details/109813934