JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用

发布时间:2022-03-01 14:20:04 作者:iii
来源:亿速云 阅读:178

JAVA正则表达式、包装类、自动装箱/自动拆箱及BigDecimal怎么用

目录

  1. 正则表达式
  2. 包装类
  3. 自动装箱与自动拆箱
  4. BigDecimal

正则表达式

1.1 正则表达式简介

正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串的模式。它通过定义一些特殊的字符和规则,可以快速地在文本中查找、替换或提取符合特定模式的字符串。正则表达式广泛应用于文本处理、数据验证、日志分析等领域。

1.2 正则表达式的基本语法

正则表达式由普通字符和元字符组成。普通字符表示它们自身,而元字符则具有特殊的含义。以下是一些常见的元字符及其含义:

1.3 Java中的正则表达式

在Java中,正则表达式主要通过java.util.regex包中的PatternMatcher类来实现。Pattern类用于编译正则表达式,Matcher类用于对字符串进行匹配操作。

1.3.1 Pattern类

Pattern类是正则表达式的编译表示。通过Pattern.compile()方法可以将一个字符串编译为一个Pattern对象。

import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String regex = "a*b";
        Pattern pattern = Pattern.compile(regex);
    }
}

1.3.2 Matcher类

Matcher类用于对字符串进行匹配操作。通过Pattern.matcher()方法可以创建一个Matcher对象。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
    public static void main(String[] args) {
        String regex = "a*b";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher("aaaaab");

        boolean matches = matcher.matches(); // 返回true
        System.out.println(matches);
    }
}

1.4 常用的正则表达式示例

1.4.1 匹配邮箱地址

String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("example@example.com");

boolean matches = matcher.matches(); // 返回true
System.out.println(matches);

1.4.2 匹配手机号码

String regex = "^1[3456789]\\d{9}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("13800138000");

boolean matches = matcher.matches(); // 返回true
System.out.println(matches);

1.4.3 匹配URL

String regex = "^(https?://)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*/?$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("https://www.example.com");

boolean matches = matcher.matches(); // 返回true
System.out.println(matches);

包装类

2.1 包装类简介

Java中的基本数据类型(如intcharboolean等)是非对象类型,不能直接参与面向对象的操作。为了弥补这一不足,Java为每个基本数据类型提供了对应的包装类(Wrapper Class)。包装类将基本数据类型封装为对象,使得基本数据类型可以像对象一样进行操作。

以下是Java中的基本数据类型及其对应的包装类:

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

2.2 包装类的常用方法

2.2.1 构造方法

包装类提供了多种构造方法,可以将基本数据类型或字符串转换为包装类对象。

Integer i1 = new Integer(100); // 通过int值创建Integer对象
Integer i2 = new Integer("100"); // 通过字符串创建Integer对象

2.2.2 静态方法

包装类提供了一些静态方法,用于将字符串转换为基本数据类型或包装类对象。

int i = Integer.parseInt("100"); // 将字符串转换为int
Integer i3 = Integer.valueOf("100"); // 将字符串转换为Integer对象

2.2.3 实例方法

包装类提供了一些实例方法,用于获取包装类对象的值或进行类型转换。

int i4 = i3.intValue(); // 将Integer对象转换为int
String s = i3.toString(); // 将Integer对象转换为字符串

2.3 包装类的应用场景

2.3.1 集合类

Java中的集合类(如ArrayListHashMap等)只能存储对象类型,不能直接存储基本数据类型。因此,在使用集合类时,通常需要使用包装类。

List<Integer> list = new ArrayList<>();
list.add(100); // 自动装箱
int i = list.get(0); // 自动拆箱

2.3.2 泛型

Java中的泛型只能使用对象类型,不能使用基本数据类型。因此,在使用泛型时,通常需要使用包装类。

List<Integer> list = new ArrayList<>();
list.add(100); // 自动装箱
int i = list.get(0); // 自动拆箱

自动装箱与自动拆箱

3.1 自动装箱与自动拆箱简介

自动装箱(Autoboxing)和自动拆箱(Unboxing)是Java 5引入的特性。自动装箱是指将基本数据类型自动转换为对应的包装类对象,而自动拆箱是指将包装类对象自动转换为对应的基本数据类型。

Integer i = 100; // 自动装箱
int j = i; // 自动拆箱

3.2 自动装箱与自动拆箱的实现原理

自动装箱和自动拆箱是通过编译器在编译时自动插入代码来实现的。例如,以下代码:

Integer i = 100;
int j = i;

在编译时会被转换为:

Integer i = Integer.valueOf(100);
int j = i.intValue();

3.3 自动装箱与自动拆箱的注意事项

3.3.1 性能问题

自动装箱和自动拆箱虽然方便,但在某些情况下可能会影响性能。例如,在循环中频繁进行自动装箱和自动拆箱操作时,可能会产生大量的临时对象,导致性能下降。

List<Integer> list = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {
    list.add(i); // 自动装箱
}

3.3.2 空指针异常

在进行自动拆箱操作时,如果包装类对象为null,则会抛出NullPointerException

Integer i = null;
int j = i; // 抛出NullPointerException

BigDecimal

4.1 BigDecimal简介

BigDecimal是Java中用于高精度计算的类。与doublefloat不同,BigDecimal可以精确表示任意大小的浮点数,并且不会出现精度丢失的问题。BigDecimal广泛应用于金融、科学计算等领域。

4.2 BigDecimal的常用方法

4.2.1 构造方法

BigDecimal提供了多种构造方法,可以将intlongdoubleString等类型转换为BigDecimal对象。

BigDecimal bd1 = new BigDecimal("100.123"); // 通过字符串创建BigDecimal对象
BigDecimal bd2 = new BigDecimal(100.123); // 通过double创建BigDecimal对象

4.2.2 算术运算

BigDecimal提供了多种算术运算方法,如加法、减法、乘法、除法等。

BigDecimal bd3 = bd1.add(bd2); // 加法
BigDecimal bd4 = bd1.subtract(bd2); // 减法
BigDecimal bd5 = bd1.multiply(bd2); // 乘法
BigDecimal bd6 = bd1.divide(bd2); // 除法

4.2.3 舍入模式

BigDecimal提供了多种舍入模式,用于控制除法运算的精度。

BigDecimal bd7 = bd1.divide(bd2, 2, RoundingMode.HALF_UP); // 保留两位小数,四舍五入

4.3 BigDecimal的应用场景

4.3.1 金融计算

在金融计算中,精度要求非常高,通常需要使用BigDecimal来避免精度丢失。

BigDecimal price = new BigDecimal("100.123");
BigDecimal quantity = new BigDecimal("10");
BigDecimal total = price.multiply(quantity); // 计算总价

4.3.2 科学计算

在科学计算中,通常需要处理非常大的数值或非常小的数值,BigDecimal可以精确表示这些数值。

BigDecimal pi = new BigDecimal("3.14159265358979323846");
BigDecimal radius = new BigDecimal("10");
BigDecimal area = pi.multiply(radius).multiply(radius); // 计算圆的面积

4.4 BigDecimal的注意事项

4.4.1 性能问题

BigDecimal的计算速度比doublefloat慢,因此在性能要求较高的场景中,需要谨慎使用。

4.4.2 构造方法的选择

在创建BigDecimal对象时,建议使用字符串构造方法,而不是double构造方法。因为double本身存在精度问题,可能会导致BigDecimal对象的精度不准确。

BigDecimal bd1 = new BigDecimal("100.123"); // 推荐
BigDecimal bd2 = new BigDecimal(100.123); // 不推荐

4.4.3 舍入模式的选择

在进行除法运算时,需要选择合适的舍入模式,以避免出现无限循环小数或精度丢失的问题。

BigDecimal bd7 = bd1.divide(bd2, 2, RoundingMode.HALF_UP); // 保留两位小数,四舍五入

结语

本文详细介绍了Java中的正则表达式、包装类、自动装箱/自动拆箱以及BigDecimal的使用方法。通过掌握这些知识点,可以更好地处理字符串、数值计算等问题,提高代码的健壮性和可维护性。希望本文对您有所帮助!

推荐阅读:
  1. java中的控制结构(if,循环)详解
  2. 利用JAVA怎么将JSONObject对象与Map对象进行转换

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java bigdecimal

上一篇:Java正则表达式使用实例分析

下一篇:css中的list-style列表样式属性怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》