题目描述
JY_WD在最近学习明史,他每天都会整理一张卡片,上面写着年份和重大事件。今天JY_WD把他整理的卡片拿出来的时候被风吹乱了。现在他想按照年份从小到大重新整理一下卡牌,众所周知JY_WD很懒,所以请你帮帮他吧。
输入描述
一个n表示n个事件。
输出描述
排好序的n个事件事件。
每行输出一个事件,年份——事件。
样例输入
3
1405郑和出使。
1403定都北京。
1404仁宗即位。
样例输出
1403——定都北京。
1404——仁宗即位。
1405——郑和出使。
代码
package homework4;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JwhDay23 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("输入事件数目:");
int n=in.nextInt();
String str[]=new String[n];
System.out.println("输入事件描述:");
for (int i = 0; i < n; i++) {
str[i]=in.next();
}
Pattern p=Pattern.compile("(\\d+)([\\u4e00-\\u9fa5]+)");//正则表达式分离数字和汉字
int num[]=new int[n];
String Chinese[]=new String[n];
for (int i = 0; i < str.length; i++) {
Matcher m=p.matcher(str[i]);
while(m.find()){
num[i]=Integer.valueOf(m.group(1));
Chinese[i]=m.group(2);
}
}
for(int i=0;i<n;i++)
for(int j=0;j<n-1;j++){
if(num[j]>num[j+1]){
int tem=num[j];
num[j]=num[j+1];
num[j+1]=tem;
String temp=Chinese[j];
Chinese[j]=Chinese[j+1];
Chinese[j+1]=temp;
}
}
for (int i = 0; i < Chinese.length; i++) {
System.out.println(num[i]+"--"+Chinese[i]);
}
}
}
Java正则表达式
正则表达式定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
在其他语言中,\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。
在 Java 中,\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。
所以,在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \d,而表示一个普通的反斜杠是 \\。