关于正则表达式的使用方法:
正则表达式:符合一定规则的字符串
A:字符
x 字符
\\ 反斜线字符
\n 换行符
\r 回车符
字符类:
[abc] 可以包含a/b/c的字符
[^abc] 除了a/b/c,任意字符都可以
[a-zA-Z]小写的a到z,大写的A到Z。两头字母包括在内
[0-9] 0-9的数字都可以
预定义字符类:
.任意字符
\d 数字[0-9]
\w 单词字符[a-zA-Z_0-9](小写的w)
\W指非单词字符 (大写的W)
边界匹配器:
^行的开头
&行的结尾
\b 单词边界 就是是不是单词字符的地方
数量词:
x?x 可以出现一次或者一次也没有
x*x 可以出现0次或者多次
x+x 必须出现一次或者多次
x{n}x 表示恰好要出现多少次
x{n,m} 至少出现n次,但是不能超过m次
代码实例:
public class RegexDemo02 {
public static void main(String[] args) {
//创建键盘记录
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的QQ号码:");
String qq = scanner.nextLine();
System.out.println(checkQQ(qq));
}
public static boolean checkQQ(String qq) {
String regex = "[1-9][0-9]{4,14}";
regex.matches(regex);
return qq.matches("[1-9]\\d{4,14}");
}
}
———————————————————————————————————————————————————————
利用正则表达式对字符串进行切割,判断格式等等运用:
public static void main(String[] args) {
//1.输入学生入学日期yyyy/mm/dd
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的入学日期:\n");
String input = sc.next();
String regex = "([0-9]{1,4})/([0]?[1-9]|[0-1][1-2])/([0-9]|[1-2][0-9]|[3][0-1])";
System.out.println(input.matches(regex));
//2.一首古诗”长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山“把它分割成字符串数组(小心中文字符,中招)
String str1 = "长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山";
String regex2 = ",";
String [] str2 = str1.split(regex2);
for(int i = 0;i < str2.length;i++){
System.out.println("\n");
System.out.println(str2[i]);}
//3.有一字符串,有中文有英文有数字有$符号#符号,String s = "我fv545是gf$中#jhg8国人"
String str3 = "我fv545是gf$中#jhg8国人";
String [] str4 = str3.split("[0-9a-z#$]");
for(int n = 0;n <= str4.length;n++){
System.out.print(str4[n]);}
//4.收到一个短信,里面有多个邮箱地址,提取出来“同学你好,欢迎你来到本公司,如果是工作问题请联系张先生,邮箱是37656@qq.com,如果是生活问题,请联系李小姐,邮箱是jgbkjbybguj@sina.com.cn,如果是工资问题请联系王小姐jytfbuy@163.com”
String s = "同学你好,欢迎你来到本公司,如果是工作问题请联系张先生,邮箱是37656@qq.com,如果是生活问题,请联系李小姐,邮箱是jgbkjbybguj@sina.com.cn,如果是工资问题请联系王小姐jytfbuy@163.com";
String regex1 = "[\\w+@\\w+([.][a-z]{1-3}){1-2}";
Pattern p=Pattern.compile(regex1);
Matcher m=p.matcher(s);
while(m.find()){
System.out.println(m.group());
}
//5.我我我98765987爱爱爱爱kujyjjhkh中中中中中HGHVH国89709,进取不得有复用信息
String s1 = "我我我98765987爱爱爱爱kujyjjhkh中中中中中HGHVH国89709";
s1.split("\\w+0");
String s2 = s1.replaceAll("(.)\\1+", "$1");
System.out.println(s2);
}
然后开始学习程序执行异常该怎么弄:
分为运行异常和编译异常:
try{}catch(Exception e){}finally{}//程序继续执行时用finally
之后讲解日期的输入格式
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd");
Date date = new Date();
sdf.Format(date);
public static void main(String[] args) {
//1.输入学生入学日期yyyy/mm/dd
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的入学日期:\n");
String input = sc.next();
String regex = "([0-9]{1,4})/([0]?[1-9]|[0-1][1-2])/([0-9]|[1-2][0-9]|[3][0-1])";
System.out.println(input.matches(regex));
//2.一首古诗”长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山“把它分割成字符串数组(小心中文字符,中招)
String str1 = "长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山";
String regex2 = ",";
接着学了异常:
分为运行异常和编译异常两大异常。
运行异常:根本原因是因为代码的不够严谨所造成的异常;
编译异常:就是编译时期出现的异常,必须处理之后程序才能运行。
当出现异常时,可以用抛出异常的方法try{}catch(){}finally{};(finally后面接着是无论是否出现异常都要继续执行的程序)
其中一个自定义异常时比较重要的一点,它是为了时出现异常的地方变得更加直观,很容易辨别出来。
代码实例:
public static void main(String[] args) {
// Demo01();
//Demo02();
Demo05();
}
//性质划分这两种
//运行异常
//编译时异常
public static void Demo01(){
//算术异常
Scanner sc = new Scanner(System.in);
System.out.println("请输入除数num1:\n");
int num1 = sc.nextInt();
System.out.println("请输入被除数num2:\n");
int num2 = sc.nextInt();
int num3 = 0;
try {
num3 = num1/num2;
}catch(ArithmeticException e){
System.err.println("除数不能为0");
}
System.out.println("num1/num2="+num3);
}
public static void Demo02(){
//数组越界
int [] nums = new int []{1,2,3};
try{
System.out.println(nums[3]);//这里的3指索引
}catch (ArrayIndexOutOfBoundsException e){
System.err.println("数组越界了");
}
}
public static void Demo03(){
int[] num = new int []{1,2,3};
num = null;
try {
System.out.println(num[2]);
} catch (NullPointerException c){
System.err.println("空指针异常");
}
}
public static void Demo04(){
Scanner input = new Scanner(System.in);
Date birthday = new Date();
System.out.println("请输入学生的出生日期:");
String dateStr = input.next();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
try {
birthday = sdf.parse(dateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
String date2 = sdf2.format(birthday);
}
public static void Demo05(){
try{
int i = Integer.parseInt("aaa");
int num = 10/0;
int[] nums = new int[]{1,2,3};
}catch (Exception e){
System.err.println("除数不为零");
}finally {
System.out.println("无论如何都要执行下去");
}
}
日期的使用格式,以及用到的一些正则表达式:
构造方法:
/*
public Date()---》当前时间
public Date(long date)————》long date表示从1970年到现在为止的毫秒数
public long getTime()_--->>返回距离1970年(格林尼治标准时间)的毫秒数。*/
代码实例:
public static void main(String[] args) throws ParseException {
// String date = "2018年10月10鈤";
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
// Date date2 = sdf.parse(date);
//
Demo04();
//System.out.println(date2.toLocaleString());
}
public static void Demo01(){
Date date = new Date();//当前时间
System.out.println(date);
System.out.println(date.toLocaleString());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String date1 = sdf.format(date);
}
public static void Demo02(){
Date d = new Date();
long ld = d.getTime();//获取1970年到现在为止的毫秒数
System.out.println(ld);
Date d2 = new Date();
System.out.println(d2.toLocaleString());
Date tomorrow = new Date(ld+1*24*60*60*1000);
System.out.println("明天:"+tomorrow.toLocaleString());
Date yesterday = new Date(ld-1*24*60*60*1000);
System.out.println("昨天:"+yesterday.toLocaleString());
}
public static void Demo03(){
//想知道现在的年份
Date date = new Date();
System.out.println(date.getYear()+1900);
//想知道现在的月份
System.out.println(date.getMonth()+1);//从零开始算起的
//想知道现在的日期
System.out.println(date.getDate());
//想知道现在的小时
System.out.println(date.getHours());
//想知道现在的分钟
System.out.println(date.getMinutes());
}
public static void Demo04(){
//其它方法
Date date = new Date();
System.out.println(date.toLocaleString());
date.setDate(10);
System.out.println(date.toLocaleString());
date.setYear(99);//从1900年算起
System.out.println(date.toLocaleString());
date.setMonth(11);//0-11
System.out.println(date.toLocaleString());
/*执行结果
2018-7-19 17:42:54
2018-7-10 17:42:54
1999-7-10 17:42:54
1999-12-10 17:42:54
*/
}