一、正则表达式
正则表达式 regex,全称Regular Expression。正则表达式是一种规则(模式)匹配语法 可以使用一些正则表达式中的特殊符号来定义一种规则,然后用此规则匹配某个字符,如果字符串与规则匹配则返回true,不匹配返回false。 其常用方法如下: \\d 匹配数字 \\D匹配非数字 \\w 匹配数字字母下划线 \\W 匹配非数字 字母 下划线 \\s匹配空格 \\非空格 |逻辑或 .匹配任意字符 使用时需要转义 []表示范围 {}表示数量 *零或多 +一或多 ?最多1
大多常用情景可以在网上搜索生成拿来使用,本文提供相关网站为
https://www.sojson.com/regex/generate 生成regex
String s="a";System.out.println(s.matches("b"));//定义s里是否有b/*//数字*/String s1="123456";//定义s里只能有数字,但是数字只能有一次,[]表示范围System.out.println(s1.matches("[0-9]"));//*表示允许零次或多次出现数字System.out.println(s1.matches("[0-9]*"));//+表示至少一次出现数字System.out.println(s1.matches("[0-9]+"));//?表示至多一次出现数字System.out.println(s1.matches("[0-9]?"));//{num}必须有几次,本例中表示0-9必须有三位System.out.println(s1.matches("[0-9]{3}"));//第一位是1,后面三位数字System.out.println(s1.matches("1[0-9]{3}"));//{num1,num2}表示区间System.out.println(s1.matches("[0-9]{3,6}"));//只允许出现357System.out.println(s1.matches("[357]{3}"));// \\d表示数字、\\D表示非数字System.out.println(s1.matches("\\d{3,6}"));System.out.println(s1.matches("\\D{3,6}"));//验证手机号String phoneNum="13691309195";System.out.println(phoneNum.matches("1[3578]\\d{9}"));/*//字母*/String eng ="abcdABCD";System.out.println(eng.matches("[a-z]*"));System.out.println(eng.matches("[A-Z]*"));System.out.println(eng.matches("[a-zA-Z]*"));//编码中A比a小System.out.println(eng.matches("[A-z]*"));//数字加字母加下划线System.out.println(eng.matches("\\w*"));//允许System.out.println(eng.matches("\\W*"));//不允许/*//空格*/String k =" ";System.out.println(k.matches("\\s"));//例子 :邮箱 xxxxxxx@xxx.com 或者xxxxxx@xxxx.com.cnString s3 = "1790352490@qq.com";System.out.println(s3.matches("\\w{6,10}" +// .有特殊含义 需要转义"@[0-9A-z]{2,6}\\.(com|com\\.cn)"));
二、Date类和Calendar 类
1、Date类
Date类是 Java 中表示日期和时间的类,可以用来获取和设置日期和时间的各个部分,比如年、月、日、小时、分钟、秒等。Date
类也可以用于日期和时间的计算、比较和格式化。
方法:
1、构造方法:
Date date = new Date();
2、获取时间
System.out.println(date.getTime());
此时获取的时间是自1900年1月1日到构造方法运行时的毫秒数,通常需要定义1个long类型的变量来接收。
这时候有人就要说了,我要这个毫秒数有什么用呢?其实是有大用处的,当我们想要测试运行效率时,可以这样做
例如我们要测试String类和StringBuffer类各自拼接十万次的运行效率,可以这样
//要求:测试String字符串和StringBuffer字符串循环拼接10万次,程序运行耗时. public static void main(String[] args) {String string =new String("abc");Date date1=new Date();for (int i=0;i<100000;i++){string +="a";}Date date2=new Date();System.out.println("String 拼接十万次用时:");System.out.println(date2.getTime()-date1.getTime());StringBuffer stringBuffer=new StringBuffer("abc");Date date3 =new Date();date3.getTime();for (int i=0;i<100000;i++){stringBuffer.append("a");}Date date4 =new Date();System.out.println("StringBuffer 拼接十万次用时:");System.out.println(date4.getTime()-date3.getTime());}
这时我们可以明显发现,StringBuffer拼接效率高于String类,这也源自与他底层没有final限制
2、toString方法
打印程序运行开始的那一时刻
3、getYear();getMonth();getDay();
这三个方法已启用需要自己手动“配平”
System.out.println(date.getYear()+1900);//2024System.out.println(date.getMonth()+1);//3System.out.println(date.getDay());//6 显示周几
非常难用
所以在使用这些功能时,推荐使用Calendar类的方法
3、时间戳
//传入运行时的毫秒数可以转回具体时间 1709376357241称为时间戳Date date2 = new Date(1709376357241L);System.out.println(date2);//Sat Mar 02 18:45:57 CST 2024
当构造函数时传入时间戳时,可以返回获取时间戳时的时间
时间戳就是我们在getTime时获取的一大串毫秒数
2、Calendar类
刚刚讲到,我们在用Date类获取时间时相当的麻烦,而且其相关方法都已经弃用了,这里Java给我们提供了更加方便的包,日历Calendar类
1、构造方法:
Calendar calendar=Calendar.getInstance();
2、相关方法
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH)+1);
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//今天是月的第几天
System.out.println(calendar.get(Calendar.DAY_OF_WEEK)-1);//是周的第几天,老外周日是第一天
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//年的第几天
System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));//年的第几周
System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));//月的第几周//设置时间
calendar.set(year,month,date);
相当的方便
3、Math类与Random类
见名知意,这两个类中为我们提供了数学与随机数的相关方法
System.out.println(Math.PI);//Π的值System.out.println(Math.abs(-1));//求绝对值System.out.println(Math.sqrt(9));//开方System.out.println(Math.pow(2,3));//n次幂System.out.println(Math.max(1,2));//返回最大值System.out.println(Math.floor(9.9));//向下取整System.out.println(Math.ceil(9.1));//向上取整System.out.println(Math.round(9.5));//四舍五入System.out.println(Math.random());//返回[0,1)之间的随机数
public class RandomDemo {static Random random=new Random();public static void main(String[] args) {System.out.println(random.nextBoolean());//布尔值随机数System.out.println(random.nextInt());//int型随机数System.out.println(random.nextLong());//long型随机数System.out.println(random.nextInt(5));//给定范围,[0,范围)随机整数}
}