正则表达式
用于字符串的替换
String str = "小红13012341111 小绿15112342222";
String regex = "(1\\d{2})(\\d{4})(\\d{4})";
str = str.replaceAll(regex , "$1****$3");
System.out.println(str);
用于字符串校验
String email = "144558498011@qq.com";
String regex = "\\d{4,11}@qq.com";
boolean matches = email.matches(regex);
System.out.println(matches);
用于字符串分割
String str = "C:\\资源\\日韩\\波多野结衣.avi";
String regex = ":?\\\\";// :\\ 或 \\
String[] split = str.split(regex);
for (String string : split) {
System.out.println(string);
}
Patten类和Match类(爬虫)
String str = "<img src ='hhy/aaa.jpg'/><div><div/> <input type='image' src='submit.gif' /><img src='bbb.jpg'/>";
//正则表达式的字符串
String regex = "<img\\b[^>]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg)\\b)[^>]*>";
//获取正则表达式对象
Pattern pattern = Pattern.compile(regex);
//匹配结果
Matcher matcher = pattern.matcher(str);
//循环遍历
while(matcher.find()){//查询匹配结果
String group = matcher.group(2);//获取匹配结果(第2组-第二个小括号里的数据)
System.out.println(group);
}
时期类
Date类(import java.util.Date
)
Date date = new Date();
//星期 月份 日期 时:分:秒 时区 年份
//Sat May 11 10:42:59 CST 2024
System.out.println(date);
SimpleDateFormat类(import java.text.SimpleDateFormat
)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//将Date对象转换为符合格式的日期时间字符串
String datetime = sdf.format(new Date());
System.out.println(datetime);//2024年05月11日 10:49:21
//将符合格式的日期时间字符串转换为Date对象
Date date = sdf.parse("2024年05月11日 10:65:21");
System.out.println(date);
Canlendar类(import java.util.Calendar
)
Canlendar
类底层使用简单工厂模式
//获取日历对象
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;//0~11月
int day = c.get(Calendar.DAY_OF_MONTH);
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.println(year);
System.out.println(month);
System.out.println(day);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
小结
Date
类和SimpleDateFormat
类联合使用
Canlendar
类获取单个日历数据
Math类
Math
类是final
类,并且它的所有成员变量和成员方法都是静态的,提供了一些数学运算
System.out.println("求次方:" + Math.pow(3, 2));//9.0
System.out.println("求平方根:" + Math.sqrt(9));//3.0
System.out.println("获取绝对值:" + Math.abs(-100));//100
System.out.println("向上取整(天花板):" + Math.ceil(1.1));//2.0
System.out.println("向下取整(地板):" + Math.floor(1.9));//1.0
System.out.println("四舍五入:" + Math.round(1.5));//2
System.out.println("最大值:" + Math.max(10, 20));//20
System.out.println("最小值:" + Math.min(10, 20));//10
System.out.println("获取随机值(0包含~1排他):" + Math.random());//0.39661220991942137
面试题
-
Math.abs()
的结果有可能是负数嘛?可能System.out.println(Math.abs(Integer.MIN_VALUE));//-2147483648
静态导入
将类里的静态属性和方法导入到本类来,成为本类自己的静态属性和方法
==缺点:==代码可读性不高
import static java.lang.Math.*;
666
public class Demo {
public static void main(String[] args) {
System.out.println("获取绝对值:" + abs(-100));
}
public static int abs(int i){
return 1234567890;
}
}
Random类
生成0~9的数字
Random random = new Random();
System.out.println(random.nextInt(10));
生成固定的伪随机数字数字
Random random = new Random(100);
System.out.println(random.nextInt());//生成一个固定的伪随机数
用于生成随机数
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
Random random = new Random();
for(int i = 0; i < 5; i++){
System.out.println(random.nextInt(11));//0-10的随机数
}
}
}
Runtime类
Runtime
代表Java程序的运行时环境,可以通过 getRuntime
方法获取当前运行时。
应用程序不能自己创建Runtime
对象,可以通过Runtime
的静态方法getRuntime()
获得Runtime
对象
Runtime rt = Runtime.getRuntime();
System.out.println("空闲内存:" + rt.freeMemory());
System.out.println("分配最大内存(字节单位):" + rt.maxMemory());
System.out.println("处理器数量(字节单位):" + rt.availableProcessors());
单例模式
懒汉式 - 通过 类.方法 时才可以new
对象
public class A{
private static A a;
private A(){}
public static A getInstance(){
if(a == null){
a = new A();
}
return a;
}
}
饿汉式 - 加载类的时候就会new对象
public class A{
private static A a = new A();
private A(){}
public static A getInstance(){
return a;
}
}
System类
系统标准输入流
InputStream in = System.in;
系统标准输出流
OutputStream out = System.out;
系统标准错误输出流
PrintStream err = System.err;//输出样式是红色
System.out和System.err
多线程,互相抢资源
即他们会互相抢夺资源,并不能保证输出完整性和逻辑正确性
System的方法
获取自1970.1.1 0:0:0到现在的毫秒数
long currentTimeMillis = System.currentTimeMillis();
获取当前系统配置文件对象
Properties properties = System.getProperties();
//os.name = Windows 11
//sun.jnu.encoding = GBK...
通过配置文件里的键获取值
String osName = System.getProperties("os.name");//Windows 11
退出当前虚拟机(0表示正常退出)
System.exit(0);
拷贝数组
String[] names = {"1","1","1","1","1","1"};
String[] newNames = new String[3];
System.arraycopy(names, 1, newNames, 0, 3);//(原数组, 开始下标,目标数组,目标数组开始下标,拷贝长度)
/*
通过拷贝数组进行数组的删除
*/
String[] names = {"1","2","3","4","5","6"};
System.arraycopy(names, 1, names, 0, 5);//拷贝结果:{"2","3","4","5","6"};
大数值运算类
当数字特别大时运算结果可能会失去精度
整数大数值类
BigInteger big1 = new BigInteger("1234567899999");//传入字符串是为了防止数值过大
BigInteger big2 = new BigInteger("1234567899999");
//加法
BigInteger add = big1.add(big2);
//减法
BigInteger subtract = big1.subtract(big2);
//乘法
BigInteger mutiply = big1.mutiply(big2);
//除法
BigInteger divide = big1.divide(big2);
整数小数值类
BigDecimal big1 = new BigDecimal("1234567.899999");//传入字符串是为了防止数值过大
BigDecimal big2 = new BigDecimal("1234567.899999");
//加法
BigDecimal add = big1.add(big2);
//减法
BigDecimal subtract = big1.subtract(big2);
//乘法
BigDecimal mutiply = big1.mutiply(big2);
//除法
BigDecimal divide = big1.divide(big2);