一、前言

字符串处理是 Java 日常开发最常用的功能,String作为 Java 字符串核心类,提供基础字符串操作方法;而正则表达式是一套文本匹配规则,依托PatternMatcher实现模式匹配,常用于数据格式校验、内容检索、字符串分割替换。本文从 String 基础、正则语法、模式匹配 API 三个维度整理,适配课程作业与课后复习。

二、String 类核心特性与常用 API

2.1 String 不可变性

Stringfinal修饰,底层字符序列不可更改,所有拼接、替换、截取操作均生成新字符串对象,原字符串内容不变;字符串常量优先存入字符串常量池,复用已有对象节省内存。大批量字符串拼接推荐StringBuilder

2.2 常用基础方法示例

java

运行

public class StringTest {
    public static void main(String[] args) {
        String content = "Java_Regex_2026";
        // 获取字符串长度
        int len = content.length();
        // 截取子串 [start,end)
        String sub = content.substring(0,4);
        // 字符串替换
        String replaceStr = content.replace("Java","JAVA");
        // 大小写转换
        String upper = content.toUpperCase();
        // 判断首尾
        boolean start = content.startsWith("Java");
        boolean end = content.endsWith("2026");
        // 判断包含
        boolean contain = content.contains("Regex");
    }
}

2.3 String 中支持正则的三个方法

matches()split()replaceAll()底层均依赖正则表达式,是正则最简使用方式:

  1. boolean matches(String regex):全字符串整体匹配正则
  2. String[] split(String regex):按匹配内容分割字符串
  3. String replaceAll(String regex,String newStr):将匹配内容整体替换

java

运行

public class StringRegexDemo {
    public static void main(String[] args) {
        String str = "a1b2c3d4";
        // 剔除所有数字
        String res = str.replaceAll("\\d","");
        // 按数字分割
        String[] arr = str.split("\\d+");
        // 校验全数字
        boolean isNum = "123456".matches("\\d+");
    }
}

三、正则表达式基础语法

正则使用特殊符号定义字符匹配规则,Java 中\需要转义写作\\,常用元字符汇总:

表格

符号 说明
\\d 匹配单个数字 0~9
\\w 字母、数字、下划线
. 任意单个字符
* 匹配前面字符 0 次或多次
+ 匹配前面字符 1 次或多次
? 匹配前面字符 0 次或 1 次
{n} 恰好匹配 n 次
{n,m} 匹配 n~m 次
^ 字符串开头
$ 字符串结尾
[] 自定义字符范围

常用业务正则模板

java

运行

// 国内手机号:1开头,第二位3-9,后接9位数字
String phoneReg = "^1[3-9]\\d{9}$";
// 简易邮箱
String emailReg = "\\w+@\\w+\\.(com|cn|org)";
// 6~12位字母数字密码
String pwdReg = "^[a-zA-Z0-9]{6,12}$";

四、Pattern 与 Matcher 模式匹配(标准正则 API)

java.util.regex包下两个核心类:

  • Pattern:正则表达式编译类,编译正则模板,不直接参与匹配
  • Matcher:匹配器对象,绑定待匹配字符串,实现查找、分组、提取

4.1 核心使用步骤

  1. 定义正则表达式字符串
  2. Pattern.compile(reg)编译生成正则模板
  3. pattern.matcher(目标字符串)获取 Matcher 对象
  4. 调用matches()/find()/group()完成匹配

4.2 案例 1:整体全匹配 matches ()

java

运行

import java.util.regex.Pattern;

public class PhoneCheck {
    public static void main(String[] args) {
        String phone = "13566778899";
        String reg = "^1[3-9]\\d{9}$";
        Pattern pattern = Pattern.compile(reg);
        boolean result = pattern.matcher(phone).matches();
        System.out.println("是否合法手机号:"+result);
    }
}

4.3 案例 2:遍历查找所有匹配内容 find ()+group ()

java

运行

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

public class FindAllNum {
    public static void main(String[] args) {
        String text = "商品1:99元,商品2:199元,商品3:299元";
        String reg = "\\d+";
        Pattern p = Pattern.compile(reg);
        Matcher m = p.matcher(text);
        // 循环查找所有连续数字
        while(m.find()){
            System.out.println("提取数值:"+m.group());
        }
    }
}

运行输出:

plaintext

提取数值:99
提取数值:199
提取数值:299

五、综合实战案例

实战:从文本提取邮箱并校验格式

java

运行

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

public class EmailExtract {
    public static void main(String[] args) {
        String content = "客服邮箱:service@qq.com,商务:boss@163.com,错误邮箱:abc@";
        String emailReg = "\\w+@\\w+\\.(com|cn)";
        Pattern pattern = Pattern.compile(emailReg);
        Matcher matcher = pattern.matcher(content);
        System.out.println("提取有效邮箱:");
        while(matcher.find()){
            System.out.println(matcher.group());
        }
    }
}

六、总结

  1. String不可变,基础操作用自带方法,校验、分割、替换可用内置正则方法;
  2. 正则是字符匹配规则,Java 中反斜杠必须转义\\
  3. 简单匹配用String.matches/split/replaceAll,需要批量提取内容使用Pattern+Matcher
  4. matches()全串匹配,find()分段查找,group()获取匹配到的内容。

 

更多推荐