初学Java基础---Day21---正则表达式,日期类,Math类,Random类,System类,Runtime类,大数值运算类,

devtools/2024/11/13 1:39:51/

一,正则表达式

理解:

        符合某个语句规范的字符串

案例:
java">//案例:把一个字符串中带电话号码替换成 130****1111 的形式String str= "小红 13012341111 小绿15112342222 小黑13912343333";//分析:电话号码可以分为三组如: (130)(1234)(1111) 其中第一组中的1是固定
//的,用正则表达式可以写成:(1\\d{2})(\\d{4})(\\d{4})String regex ="(1\\d{2})(\\d{4})(\\d{4})";
str = str.replaceAll(regex,"$1****$3");// $n 表示保留第n组正则表达式里的数据

小结:正则表达式可以做替换功能

java">//案例: 利用正则表达式验证邮箱如:8928398@qq.com 其中@前面数字在4-11位String email ="8928398@qq.com";
String regex = "\\d{4,11}@qq.com";
boolean matches =email.matches(regex);
sout(matches);

小结:正则表达式可以做验证

java">//案例:Pattern+Matcher 找到前端代码中的图片路径
public class Test04 {/*** 知识点:正则表达式* 理解:符合某个语句规范的字符串* * 案例:Pattern+Matcher 找到前端代码中的图片路径* * 小结:利用正则表达式做字符串的爬数据的工作*/public static void main(String[] args) {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表示第2组数据System.out.println(group);}}
}	

二,日期类

知识点: 日期时间类

Date(java.util) ---日期类

SimpleDateFormat --格式化日期类

Calendar ---日历类

案例:
java">public class Test01 {/*** 知识点:日期时间类* 		Date(java.util) -- 日期类* 		SimpleDateFormat -- 格式化日期类* 		Calendar -- 日历类*/public static void main(String[] args) {Date date = new Date();//星期 月份 日期 时:分:秒 时区 年份//Sat Jan 27 14:31:41 CST 2024System.out.println(date);}
}
java">import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test02 {/*** 知识点:日期时间类* 		Date(java.util) -- 日期类* 		SimpleDateFormat -- 格式化日期类* 		Calendar -- 日历类*/public static void main(String[] args) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");//Date 转 StringString datetime = sdf.format(new Date());System.out.println(datetime);//String 转 Date Date date = sdf.parse("2024年01月27日 14时37分61秒");System.out.println(date);}
}
java">import java.util.Calendar;public class Test03 {/*** 知识点:日期时间类* 		Date(java.util) -- 日期类* 		SimpleDateFormat -- 格式化日期类* 		Calendar -- 日历类* */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,0表示1月,所以加个1int 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);}
}
小结:

1.Date + SimpleDateFormat一起使用,获取我们想要的日期时间格式

2.获取单个日历信息,考虑使用Calendar

三,Math类及静态导入

Math 类提供了一序列基本数学运算和几何函数的方法。

Math类是final类,并且它的所有成员变量和成员方法都是静态的。

1.Math类的常量和常用方法
java">public class Test01 {/*** 知识点:Math类* * Math 类提供了一序列基本数学运算和几何函数的方法。* Math类是final类,并且它的所有成员变量和成员方法都是静态的。*/public static void main(String[] args) {System.out.println("求次方:" + Math.pow(3, 2));//9.0System.out.println("求平方根:" + Math.sqrt(9));//3.0System.out.println("求绝对值:" + Math.abs(-100));//100System.out.println("求最大值:" + Math.max(10, 20));//20System.out.println("求最小值:" + Math.min(10, 20));//10System.out.println("向下取整(地板):" + Math.floor(1.9));//1.0System.out.println("向上取整(天花板):" + Math.ceil(1.1));//2.0System.out.println("四舍五入:" + Math.round(1.5));//2System.out.println("获取随机值:" + Math.random());//注意:随机出0~1的数字,0包含,1排他//需求:随机出1~100的数字int num = (int)(Math.random()*100)+1;System.out.println("获取随机值:" + num);}
}
2.面试题
java">//面试题:Math.abs会出现负数吗?
public class Test02 {/*** 知识点:Math类*/public static void main(String[] args) {//获取int类型的最大值 -> 2147483647 -- 2的31次方-1System.out.println(Integer.MAX_VALUE);//获取int类型的最小值 -> -2147483648 - -2的31次方System.out.println(Integer.MIN_VALUE);//面试题:Math.abs会出现负数吗?//会出现负数 --> -2147483648System.out.println(Math.abs(-2147483648));}
}
3.静态导入

知识点:静态导入

理解:将类中所有的静态属性和方法都导入到本类来,作为本来自己的静态属性和方法

缺点:如果类中的方法和静态导入类中的方法重名了,会调用本类自己的静态方法,所以可读性差,不建议使用

java">//静态导入:将类中所有的静态属性和方法都导入到本类来,作为本来自己的静态属性和方法
import static java.lang.Math.*;public class Test03 {/*** 知识点:静态导入* 理解:将类中所有的静态属性和方法都导入到本类来,作为本来自己的静态属性和方法* 缺点:如果类中的方法和静态导入类中的方法重名了,会调用本类自己的静态方法,所以可读性差,不建议使用*/public static void main(String[] args) {System.out.println("求次方:" + pow(3, 2));//9.0System.out.println("求平方根:" + sqrt(9));//3.0}public static int sqrt(int i){return 123456;}
}

四,Random类

理解:随机类

java">import java.util.Random;public class Test01 {/*** 知识点:Random* 理解:随机类*/public static void main(String[] args) {Random ran = new Random();System.out.println("随机出int取值范围里的数值:" + ran.nextInt());System.out.println("随机出0~9的int数值:" + ran.nextInt(10));System.out.println("随机出double取值范围里的数值:" + ran.nextDouble());System.out.println("随机出boolean取值范围里的数值:" + ran.nextBoolean());}
}
2.深入
java">import java.util.Random;public class Test02 {/*** 知识点:深入Random* * 注意:seed叫做种子数,种子数一旦固定随机出的数字就是固定的!!!*/public static void main(String[] args) {Random ran = new Random(1000);System.out.println("随机出int取值范围里的数值:" + ran.nextInt());System.out.println("随机出0~9的int数值:" + ran.nextInt(10));System.out.println("--------------------");MyRandom myRandom = new MyRandom();System.out.println("随机出int取值范围里的数值:" + myRandom.nextInt());System.out.println("随机出0~9的int数值:" + myRandom.nextInt(10));}
}
java">public class MyRandom {//种子数private long seed;public MyRandom() {this(seedUniquifier() ^ System.nanoTime());}private static long seedUniquifier() {for (;;) {long current = System.currentTimeMillis();long next = current * 181783497276652981L;if (next%3==0 || next%12==0 || next%17==0){return next;}}}public MyRandom(long seed) {this.seed = seed;}public int nextInt(){return (int) seed;}public int nextInt(int bound){return Math.abs((int) seed)%bound;}
}

五,System类

理解:

Java程序的运行平台

1、 System类提供了一些静态属性和方法,允许通过类名直接调用。

2、 System类提供了代表标准输入、标准输出、错误输出的类属性。

3.System类提供了一些静态方法用于访问环境变量、系统属性的方法。

System类属性
staticPrintStreamerr “标准”错误输出流。
staticInputStreamin “标准”输入流。
staticPrintStreamout “标准”输出流。
java">import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;public class Test01 {/*** 知识点:System - 属性* */public static void main(String[] args) {//获取系统标准的输入流 - 方向:控制台->程序InputStream in = System.in;Scanner scan = new Scanner(in);System.out.println("请输入int值:");int num = scan.nextInt();//获取系统标准的输出流 - 方向:程序 -> 控制台
//		PrintStream out = System.out;
//		out.println(num);//获取系统标准的错误输出流 - 方向:程序 -> 控制台PrintStream err = System.err;err.println(num);scan.close();}
}
System.out 和 System.err 的区别
java">public class Test02 {/*** 知识点:System.out和System.err的区别* * 注意:稍微感受多线程抢资源的场景*/public static void main(String[] args) {System.out.println("小明");System.err.println("小红");System.out.println("小强");}
}
System 的方法

        

java">import java.util.Properties;public class Test03 {/*** 知识点:System - 方法*/public static void main(String[] args) {long currentTimeMillis = System.currentTimeMillis();System.out.println("获取自1970年1月1日到现在的毫秒数:" + currentTimeMillis);//获取系统参数Properties properties = System.getProperties();System.out.println(properties);//通过具体Key获取对应的ValueString property = System.getProperty("os.name");System.out.println("通过具体Key获取对应的Value:" + property);//拷贝数组int[] arr = {1,2,3,4,5,6,7,8,9,10};int[] newArr = new int[4];System.arraycopy(arr, 3, newArr, 0, 4);//(源数组,开始下标,目标数组,开始下标,拷贝长度)for (int num : newArr) {System.out.println(num);}//利用System.arraycopy做数组的删除功能String[] names = {"aaa","bbb","ccc","ddd","eee","fff",null,null,null};	System.arraycopy(names, 2, names, 1, 4);names[5] = null;for (String str : names) {System.out.println(str);}//退出当前虚拟机,0表示正常退出System.exit(0);}

六,RunTime类

 理解:Runtime表示运行时系统(JVM)

java">public class Test01 {/*** 知识点:Runtime* 理解:Runtime表示运行时系统(JVM)*/public static void main(String[] args) {//获取运行时系统对象Runtime run = Runtime.getRuntime();System.out.println("获取最大操作数:" + run.availableProcessors());//8System.out.println("获取最大内存数(byte):" + run.maxMemory());System.out.println("获取闲置内存数(byte):" + run.freeMemory());}
}

用途:程序的效率测试

java">public class Test02 {/*** 知识点:程序的效率(时间、内存)*/public static void main(String[] args) {//		Runtime run = Runtime.getRuntime();
//		long startTime = System.currentTimeMillis();
//		long startMemory = run.freeMemory();
//		String str = "莹莹";
//		for (int i = 1; i < 50000; i++) {
//			str += "小可爱,皇冠给你带";
//		}
//		long endMemory = run.freeMemory();
//		long endTime = System.currentTimeMillis();
//		System.out.println("消耗时长:" + (endTime-startTime));//6640
//		System.out.println("消耗内存:" + (startMemory-endMemory));System.out.println("--------------------------------------------");//		Runtime run = Runtime.getRuntime();
//		long startTime = System.currentTimeMillis();
//		long startMemory = run.freeMemory();
//		StringBuffer sb = new StringBuffer("莹莹");
//		for (int i = 1; i < 50000; i++) {
//			sb.append("小可爱,皇冠给你带");
//		}
//		long endMemory = run.freeMemory();
//		long endTime = System.currentTimeMillis();
//		System.out.println("消耗时长:" + (endTime-startTime));//5
//		System.out.println("消耗内存:" + (startMemory-endMemory));//2293808System.out.println("--------------------------------------------");Runtime run = Runtime.getRuntime();long startTime = System.currentTimeMillis();long startMemory = run.freeMemory();StringBuffer sb = new StringBuffer(450060);//优化方案:减少底层扩容次数sb.append("莹莹");for (int i = 1; i < 50000; i++) {sb.append("小可爱,皇冠给你带");}long endMemory = run.freeMemory();long endTime = System.currentTimeMillis();System.out.println("消耗时长:" + (endTime-startTime));//5System.out.println("消耗内存:" + (startMemory-endMemory));//900136}
}

七,大数值运算类

BigInteger:

整数大数值运算类

当整数运算超出int类型的取值范围时

知识点:BigInteger - 整数大数值运算类
java">import java.math.BigInteger;public class Test01 {/*** 知识点:BigInteger - 整数大数值运算类*/public static void main(String[] args) {BigInteger big1 = new BigInteger("2100000000");BigInteger big2 = new BigInteger("2100000000");BigInteger add = big1.add(big2);
System.out.println("加法:" + add);//结果是字符串类型,底层是toStringBigInteger 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 - 小数大数值运算类

注意: * 1.小数做运算会失去精度,所以小数做运算都要生成大数值的运算类 * 2.构造方法里的值使用字符串(即得用引号)

java">import java.math.BigDecimal;public class Test02 {/*** 知识点:BigDecimal - 小数大数值运算类* 注意:* 		1.小数做运算会失去精度,所以小数做运算都要生成大数值的运算类* 		2.构造方法里的值使用字符串*/public static void main(String[] args) {BigDecimal big1 = new BigDecimal("0.5");BigDecimal big2 = new BigDecimal("0.4");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);System.out.println("除法:" + divide);}
}
java">//当计算出无限循环小数或者无限不循环小数时,需要用BigDecimal其他的重载方法
import java.math.BigDecimal;public class Test03 {/*** 知识点:BigDecimal - 小数大数值运算类*/public static void main(String[] args) {BigDecimal big1 = new BigDecimal("10");BigDecimal big2 = new BigDecimal("3");BigDecimal divide = big1.divide(big2, 3, BigDecimal.ROUND_HALF_UP);// Big1/Big2 保留3为小数,四舍五入System.out.println("除法:" + divide);}
}


http://www.ppmy.cn/devtools/133057.html

相关文章

海外云手机在出海业务中的优势有哪些?

随着互联网技术的快速发展&#xff0c;海外云手机已在出海电商、海外媒体推广和游戏行业都拥有广泛的应用。对于国内的出海电商企业来说&#xff0c;短视频引流和社交平台推广是带来有效流量的重要手段。借助云手机&#xff0c;企业能够更高效地在新兴社交平台上推广产品和品牌…

Objective-C 1.0和2.0有什么区别?

Objective-C ObjC比较小众&#xff0c;在1980年左右由Stepstone公司的Brad Cox和Tom Love发明。后来NeXT公司获得ObjC语言使用权&#xff0c;再后来到1996年NeXT被苹果公司收购也变成苹果公司使用&#xff0c;Mac市场占有率本身就不高&#xff0c;ObjC没有太多程序员。在移动互…

【人工智能训练师】7 大数据处理与应用

大数据处理与应用&#xff08;Hive技术&#xff09;(0/100分) 1.本地开发工具连接Hadoop集群 1.本次环境版本为Hadoop2.7.7&#xff0c;对应eclips插件存放于云主机master:/usr/package277/中。 2.本机映射名为hadoop000&#xff0c;云主机Hadoop/Hive的hosts文件中IP需要修改…

超子物联网HAL库笔记:定时器[基础定时]篇

超子物联网 HAL库学习 汇总入口&#xff1a; 超子物联网HAL库笔记&#xff1a;[汇总] 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一、资源介绍&#xff1a;STM32F103C8T6定时器资源介绍 高级定时器&#x…

CSRF详解

CSRF&#xff0c;全称是Cross-Site Request Forgery&#xff0c;即跨站请求伪造&#xff0c;也被称为“one click attack”或者session riding&#xff0c;是一种网络攻击方式。它允许攻击者诱导用户在已登录的Web应用程序上执行非预期的操作。 工作原理CSRF攻击通常涉及三个主…

Spring Security @PreAuthorize @PostAuthorize 权限控制

PreAuthorize : 在方法执行之前进行权限验证 PostAuthorize : 在方法执行之后进行权限验证 注解参数: hasRole&#xff0c;对应 public final boolean hasRole(String role) 方法&#xff0c;含义为必须含有某角色&#xff08;非ROLE_开头&#xff09;&#xff0c;如有多个的…

vue,uniapp,微信小程序解决字符串中出现数字则修改数字样式,以及获取字符串中的数字

简单记录一下&#xff0c;最近遇到的一个新需求&#xff1a;后端返回的是非富文本&#xff0c;只是一串字符串&#xff0c;其中包含了文字和数字&#xff0c;前端需要将出现数字的地方将其加粗或者修改颜色等需求 设计思路&#xff1a;&#xff08;简单做个记录方便以后理解&a…

mac-泛洪

泛洪攻击的类型 TCP SYN Flood&#xff1a; 攻击者向目标服务器发送大量的 TCP SYN 请求&#xff0c;但不完成握手过程。服务器为每个请求分配资源&#xff0c;最终可能耗尽其连接表&#xff0c;导致无法处理正常请求。 UDP Flood&#xff1a; 攻击者向目标发送大量的 UDP 数据…