一、正则表达式
含义:用来描述或者匹配一系列符合某个语句规则的字符串
案例一、
package com.dream.regex_class;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test01 {
public static void main(String[] args) {
/**
* 案例:把一个字符串中带电话号码替换成130****1111
*/
String str = "小红13012341111 小绿15112342222";
//正则表达式的字符串
String regex = "(\\d{3})(\\d{4})(\\d{4})";
String replaceAll = str.replaceAll(regex, "$1****$3");
//底层原理:
// Pattern pattern = Pattern.compile(regex);//获取正则表达式的对象
// Matcher matcher = pattern.matcher(str);//匹配结果
// String replaceAll = matcher.replaceAll("$1****$3");//替换
System.out.println(replaceAll);
}
}
案例二、
package com.dream.regex_class;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test02 {
public static void main(String[] args) {
/**
* 案例:校验QQ邮箱
*/
String str = "1445584980@qq.com";
//正则表达式的字符串
String regex = "\\d{5,10}@qq.com";
boolean matches = str.matches(regex);
//底层原理:
// Pattern pattern = Pattern.compile(regex);//获取正则表达式对象
// Matcher matcher = pattern.matcher(str);//获取匹配结果
// boolean matches = matcher.matches();//判断是否完全匹配
System.out.println(matches);
}
}
案例三、
package com.dream.regex_class;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test03 {
public static void main(String[] args) {
/**
* 案例2:分隔路径
*/
String str = "C:\\资源\\日韩\\波多野结衣.avi";
//正则表达式的字符串
String regex = ":?\\\\";
String[] split = str.split(regex);
//底层原理
// Pattern pattern = Pattern.compile(regex);//获取正则表达式的对象
// String[] split = pattern.split(str);//分隔
for (String string : split) {
System.out.println(string);
}
}
}
案例四、
package com.dream.regex_class;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test04 {
public static void main(String[] args) {
/**
* 案例3:Pattern+Matcher 找到前端代码中的图片路径
*/
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);
// System.out.println("在字符串中是否整个匹配:" + matcher.matches());
// System.out.println("在字符串中是否开头就匹配:" + matcher.lookingAt());
// System.out.println("在字符串中是否有包含匹配:" + matcher.find());
//遍历查找
while(matcher.find()){
String group = matcher.group(2);//获取匹配结果
System.out.println(group);
}
}
}
- Pattern:代表正则表达式的匹配模式
- Matcher:提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
总结:Pattern与Matcher一起合作
- Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
- 单独用Pattern只能使用Pattern.matches(String regex,CharSequence input)一种最基础最简单的匹配。
- 经验:
- 1.正则表达式在工作中实际应用在验证邮箱、验证手机号码、替换字符串
- 2.正则表达式几乎不用我们自己写,百度即可
二、Date类
关于日期时间的类:
-
1.Date 日期类
package com.dream.datetime_class; import java.util.Date; public class Test01 { public static void main(String[] args) { Date date = new Date(); //星期 月份 日期 时:分:秒 时区 年份 //Thu Aug 05 11:23:00 CST 2021 System.out.println(date); //自1970.1.1 0:0:0 往后推1000毫秒的时间 // Date date = new Date(1000); //Thu Jan 01 08:00:01 CST 1970 // System.out.println(date); } } -
2.SimpleDateFormat 格式化日期类
package com.dream.datetime_class; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test02 { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //将Date 转 字符串 String format = sdf.format(new Date()); System.out.println(format); ///将字符串 转 Date Date date = sdf.parse("2021年08月05日 11:28:61"); System.out.println(date); } } -
3.Calendar 日历类
(获取单个的日期信息)
package com.dream.datetime_class; import java.util.Calendar; public class Test03 { public static void main(String[] args){ //获取日历类的对象 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); } }
三、Math类
Math 类提供了一序列基本数学运算和几何函数的方法。
Math类是final类,并且它的所有成员变量和成员方法都是静态的。
package com.dream.math_class;
public class Test01 {
public static void main(String[] args) {
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.001));//2.0
System.out.println("向下取整(地板):" + Math.floor(1.99));//1.0
System.out.println("求最大值:" + Math.max(10, 20));//20
System.out.println("求最小值:" + Math.min(10, 20));//10
System.out.println("四舍五入:" + Math.round(1.4));//1
System.out.println("获取随机值(0包含~1不包含):" + Math.random());
}
}
金典案例:
package com.dream.math_class;
public class Test02 {
public static void main(String[] args) {
/**
* 案例:随机出1~100的数字
*/
System.out.println((int)(Math.random()*100) + 1);
/**
* 案例:Math.abs() 有可能返回负数吗?
*/
System.out.println(Math.abs(Integer.MAX_VALUE+1));
}
}
1、静态导入
package com.dream.math_class;
//静态导入:将Math类中所有的静态属性和静态方法都导入Test04这个类中,把导入的静态属性和静态方法都认为是Test04自己的内容
import static java.lang.Math.*;
public class Test04 {
public static void main(String[] args) {
System.out.println("四舍五入:" + round(1.4));//1
//静态导入缺点:可读性不高
//如果本类中有和静态导入类相同的方法,会就近调用本类中的方法
System.out.println("获取随机值(0包含~1不包含):" + random());
}
private static int random() {
return 123456789;
}
}
四、Random类
package com.dream.random_class;
import java.util.Random;
public class Test01 {
public static void main(String[] args) {
//创建随机类的对象
Random ran = new Random();
int nextInt1 = ran.nextInt();
System.out.println("随机出int取值范围内的数字:" + nextInt1);
int nextInt2 = ran.nextInt(10);
System.out.println("随机出0~9的数字:" + nextInt2);
boolean nextBoolean = ran.nextBoolean();
System.out.println("随机出boolean值:" + nextBoolean);
}
}
4.1、深入Random:
注意:随机全靠种子数,种子数固定,随机出的数据也是固定的
自己写个Random类
package com.dream.random_class;
public class MyRandom {
//种子数
private long seed;
public MyRandom() {
//seedUniquifier() ^ System.nanoTime() 获取到相对随机的种子数
this(seedUniquifier() ^ System.nanoTime());
}
public static long seedUniquifier(){
long current = System.currentTimeMillis();
for(;;){
current += current*5/2+3;
if(current%4==0 || current%7==0){
return current;
}
}
}
public MyRandom(long seed){
this.seed = seed;
}
public int nextInt(){
return (int) seed;
}
public int nextInt(int i){
return Math.abs((int) seed) % i;
}
}
测试类
package com.dream.random_class;
import java.util.Random;
public class Test03 {
public static void main(String[] args) {
Random ran = new Random();
System.out.println(ran.nextInt());
System.out.println(ran.nextInt(100));
System.out.println("--------------");
MyRandom myRandom = new MyRandom();
System.out.println(myRandom.nextInt());
System.out.println(myRandom.nextInt(10));
}
}
五、runtime类- 运行环境类
package com.dream.runtime_class;
public class Test01 {
public static void main(String[] args) {
/**
* 知识点:Runtime - 运行环境类
*/
//获取运行环境对象
Runtime run = Runtime.getRuntime();
System.out.println("获取最大内存数(字节):" + run.maxMemory());
System.out.println("获取闲置内存数(字节):" + run.freeMemory());
System.out.println("获取处理数:" + run.availableProcessors());
}
}
5.1、深入runtime
测试程序效率(时间、内存)
package com.dream.runtime_class;
public class Test02 {
public static void main(String[] args) {
//获取自1970.1.1 0:0:0到现在的毫秒数
Runtime run = Runtime.getRuntime();
long startTime = System.currentTimeMillis();
long startMemory = run.freeMemory();
StringBuilder sb = new StringBuilder("白雪公主");
for (int i = 0; i < 50000; i++) {
sb.append("小可爱,皇冠给你带");
}
long endMemory = run.freeMemory();
long endTime = System.currentTimeMillis();
System.out.println("消耗时长:" + (endTime-startTime));//5
System.out.println("消耗内存:" + (startMemory-endMemory));//2457664
}
}
六、System(系统类)的属性
package com.dream.system_class;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
//系统标准的输入流(方向:控制台 -> 程序)
InputStream in = System.in;
Scanner scan = new Scanner(in);
String next = scan.next();
//系统标准的输出流(方向:程序 -> 控制台)
// PrintStream out = System.out;
// out.println(next);
//系统标准的错误输出流(方向:程序 -> 控制台)
PrintStream err = System.err;
err.println(next);
//关闭资源
scan.close();
}
}
6.1、System的out和err
package com.dream.system_class;
public class Test02 {
public static void main(String[] args) {
/**
* 理解:out和err是两个线程,谁抢到CPU资源就运行
* 说明:多线程的程序随机性很强
*/
System.out.println("小明");
System.err.println("小红");
System.out.println("小强");
}
}
6.2、System的方法
package com.dream.system_class;
import java.util.Properties;
public class Test03 {
public static void main(String[] args) {
//获取系统参数的对象(键值对表达式)
Properties properties = System.getProperties();
System.out.println(properties);
//通过键获取值
String value = System.getProperty("os.name");
System.out.println(value);
//退出当前虚拟机
System.exit(0);
}
}
七、BigInteger类-整数类型的大数值运算类
package com.dream.big;
import java.math.BigInteger;
public class Test01 {
public static void main(String[] args) {
BigInteger big1 = new BigInteger("123456789123456789123456789");
BigInteger big2 = new BigInteger("123456789123456789123456789");
BigInteger add = big1.add(big2);//加法
System.out.println(add);
BigInteger subtract = big1.subtract(big2);//减法
System.out.println(subtract);
BigInteger multiply = big1.multiply(big2);//乘法
System.out.println(multiply);
BigInteger divide = big1.divide(big2);//除法
System.out.println(divide);
}
}
八、BigDecimal-小数类型的大数值运算类
package com.dream.big;
import java.math.BigDecimal;
public class Test02 {
public static void main(String[] args) {
BigDecimal big1 = new BigDecimal("0.5");
BigDecimal big2 = new BigDecimal("0.3");
BigDecimal add = big1.add(big2);//加法
System.out.println(add);
BigDecimal subtract = big1.subtract(big2);//减法
System.out.println(subtract);
BigDecimal multiply = big1.multiply(big2);//乘法
System.out.println(multiply);
BigDecimal divide = big1.divide(big2, 2, BigDecimal.ROUND_HALF_UP);//保留小数位
System.out.println(divide);
}
}
本文详细介绍了Java中正则表达式的使用,包括字符串替换、邮箱验证、路径分隔等案例,以及Date类、SimpleDateFormat类和Calendar类在日期时间处理中的应用,展示了Math类的基本数学运算,并探讨了Random类的随机数生成,同时提及了Runtime和System类的相关知识,最后提及了BigInteger和BigDecimal在大数值运算中的作用。

1123

被折叠的 条评论
为什么被折叠?



