Java API(十二):正则表达式、包装类、BigDecimal类、BigInteger类


Java API

包括正则表达式简介、常见的正则表达式、正则表达式方法(split、replace、matches)、包装类概述、拆装箱、常用方法(MAX_VALUE、MIN_VALUE、parseInt parseDouble、toBinaryString、toHexString)、BigDecimal类、BigInteger类。


一、正则表示式

1.1、正则表达式简介

1)开发中,需要对字符串数据进行一些复杂的匹配、查找、替换等操作。通过“正则表达式”,可以方便的实现字符串的复杂操作

2)正则表达式是一串特定的字符。如:“[a-z]”表示a到z的之间的任意一个字符

1.2、常见的正则表达式

常见的正则表达式(1)

正则表达式说明
[abc]a、b、c中的任意一个字符
[^abc]除a、b、c外的任意字符
[a-z]a~z中的任意一个字符
[a-zA-Z0-9]a~z、A~Z、0~9中的任意一个字符
[a-z&&[^bc]]a~z中除了b、c之外的任意一个字符,&&表示“与”的关系

常见的正则表达式(2)

正则表达式说明
.任意一个字符
\d任意一个数字字符,相当于[0~9]
\D任意一个非数字字符,相当于[^0~9]
\s空白字符,相当于[\t\n\xOB\f\r]
\S非空白字符,相当于[^\s]
\w任意一个单词字符,相当于[a-zA-Z0-9]
\W任意一个非单词字符,相当于[^\w]

常见的正则表达式(3)

正则表达式说明
X?表示0个或1个X
X*表示0个或任意多个X
X+表示0个或任意多个X(大于等于1个X)
X{n}表示n个X
X{n,}表示n个到任意多个X(大于等于n个X)
X{n,m}表示n个到m个X(大于等于n个且小于m个X)

1.3、正则表达式方法

(1)、split

1) String[] split(String regex):参数regex为正则表达式

2)将当前字符串按照满足正则表达式的部分进行拆分,返回拆分后的每段内容

import java.util.Arrays;

public class Test {
    public static void main(String[] ages){
        String str = "pp123qwe456asd789zxc999999999i";
        String[] arr = str.split("[0-9]+"); //任意个0-9之间的字符
        System.out.println(Arrays.toString(arr)); //用字符串表示数组,结果为[pp, qwe, asd, zxc, i]
    }
}

在这里插入图片描述

(2)、replace

1)String replaceAll(String regex,String str):参数regex为正则表达式;str为替换的字符串内容

2)将当前字符串满足正则表达式的部分替换为给定的字符串

public class StringReplaceAllDemo {
    public static void main(String[] args) {
        String str = "pp123qwe456asd789zxc";
        String newStr = str.replaceAll("\\b+","#NUMBER#"); //两个\,有一个代表转义
        System.out.println(newStr); //结果为#NUMBER#pp123qwe456asd789zxc#NUMBER#
    }
}

在这里插入图片描述

(3)、matches

1)boolean matches(String regex):参数regex为正则表达式

2)根据给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true,否则返回false

public class StringMatchesDemo {
    public static void main(String[] args) {
        //电子邮箱的正则表达式:[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z0-9]+)+
        //java中\\\\代表“\\”
        String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9]+)+"; //\.在java中,\代表进行转义,但在java中.不需要转义没有特殊含义,所以在\.前加个\,代表只是个\.
        System.out.println(regex);
        String mile = "ewrfw@dsaf.cd";
        boolean flag = mile.matches(regex);
        System.out.println(flag);
    }
}

在这里插入图片描述

经典案例:验证手机号格式

二、基本类型包装类

2.1、包装类概述

java语言的8种基本类型分别对应了8种“包装类”,每一种包装类都封装了一个对应的基本类型成员变量,同时还提供了一些针对该数据类型的实用方法

包装类对应的基本类型
java.lang.Integerint
java.lang.Longlong
java.lang.Doubledouble
java.lang.Characterchar
java.lang.Booleanboolean
java.lang.Bytebyte
java.lang.Floatfloat
java.lang.Shortshort

2.2、拆装箱

1)JDK 5发布之前,使用包装类对象进行运算时,需要进行“拆箱”和“装箱”操作。即运算前先包装类对象所封装的基本类型数据,运算后再将结果封装成包装类对象

Integer i = Integer.valueOf(100);
Integer j = Integer.valueOf(100);
Integer k = Integer.valueOf(i.intValue()+j.intValue());

2)JDK 5之后推出了一个新的特征:自动拆装箱

3)自动拆装箱是编译器认可,而不是虚拟机认可

4)编译器在将源程序编译时自动补充代码来完成基本类型与包装类之间的转换

下面代码触发了自动拆箱,在class文件中,下面代码被编译器改为:

Integer i1 = 123; //编译前
Integer i1 = Integer.valueOf(123); //编译后

2.3、常用方法

Integer和Double的常用方法

(1)、MAX_VALUE

MAX_VALUE:返回类型的最大值

System.out.println(Integer.MAX_VALUE); //2147483647
System.out.println(Double.MAX_VALUE); //1.7976931348623157E308

(2)、MIN_VALUE

MIN_VALUE:返回类型的最小值

System.out.println(Integer.MIN_VALUE); //-2147483648
System.out.println(Double.MIN_VALUE); //4.9E-324

(3)、parseInt parseDouble

1)包装类提供的静态方法parseInt(String str)、parseDouble(String str)

2)parseInt和parseDouble方法可以将给定的字符串转换为对应的基本类型

String str = “123”;
int i = Integer.parseInt(str);
System.out.println(i+1); //124
double d = Double.parseDouble(str);
System.out.println(d+1); //124.0

3)如何字符串无法解析为数值将抛出NumberFormatException

String str = “123.123”;
int i = Integer.parseInt(str); //数字格式异常:NumberFormatException

(4)、toBinaryString

String toBinaryString(int i)方法将int数据转换为二进制的字符串序列

String bstr = Integer.toBinaryString(100); //1100100

(5)、toHexString

String toHexString(int i)方法将int数据转换为十六进制的字符串序列

String hstr = Integer.toHexString(100); //64

2.4、BigDecimal类

1)java浮点数据类型(float和double)在运算时会有舍入误差。进行精度计算时,可以使用import java.math.BigDecimal类

2)常用方法:add(加)、subtract(减)、multiply(乘)、divide(除)

BigDecimal b1 = new BigDecimal(“3.0”);
BigDecimal b2 = new BigDecimal(“2.9”);
BigDecimal a = b1.add(b2); //5.9
BigDecimal s = b1.subtract(b2); //0.1
BigDecimal m = b1.multiply(b2); //8.70
BigDecimal d = b1.divide(b2); //ArithmeticException

3)对于divide方法,通常需要制定精度和舍入模式,否则遇到无限小数时,会抛异常ArithmeticException

BigDecimal d1 = b1.divide(b2,6,BigDecimal.ROUND_HALF_UP); //1.034483

6:表示保留六为小数;ROUND_HALF_UP表示四舍五入

2.5、BigInteger类

1)java提供的整数类型(int和long)的存储范围有限,当需要进行很大的整数运算时可以使用import java.math.BigInteger类

2)理论上讲BigInteger的存储范围只受内存容量的限制

public class Test {
    public static void main(String[] ages){
        BigInteger sum = BigInteger.valueOf(1);
        for(int i=1;i<200;i++){
            sum = sum.multiply(BigInteger.valueOf(i));
        }
        System.out.println(sum.toString().length()); //373
        System.out.println(sum);
    }
}

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹿快跑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值