一、正则表达式
正则表达式 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}"));
//只允许出现357
System.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.cn
String 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);//2024
System.out.println(date.getMonth()+1);//3
System.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,范围)随机整数
}
}