14-正则表达式、Data类、Math类、Random类、runtime类、Sysytem类、大数值运算类

本文详细介绍了Java中正则表达式的使用,包括字符串替换、邮箱验证、路径分隔等案例,以及Date类、SimpleDateFormat类和Calendar类在日期时间处理中的应用,展示了Math类的基本数学运算,并探讨了Random类的随机数生成,同时提及了Runtime和System类的相关知识,最后提及了BigInteger和BigDecimal在大数值运算中的作用。

一、正则表达式

含义:用来描述或者匹配一系列符合某个语句规则的字符串

案例一、

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);
	
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值