Java:String、模式匹配与正则表达式
·
一、前言
字符串处理是 Java 日常开发最常用的功能,String作为 Java 字符串核心类,提供基础字符串操作方法;而正则表达式是一套文本匹配规则,依托Pattern、Matcher实现模式匹配,常用于数据格式校验、内容检索、字符串分割替换。本文从 String 基础、正则语法、模式匹配 API 三个维度整理,适配课程作业与课后复习。
二、String 类核心特性与常用 API
2.1 String 不可变性
String被final修饰,底层字符序列不可更改,所有拼接、替换、截取操作均生成新字符串对象,原字符串内容不变;字符串常量优先存入字符串常量池,复用已有对象节省内存。大批量字符串拼接推荐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()底层均依赖正则表达式,是正则最简使用方式:
boolean matches(String regex):全字符串整体匹配正则String[] split(String regex):按匹配内容分割字符串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 核心使用步骤
- 定义正则表达式字符串
Pattern.compile(reg)编译生成正则模板pattern.matcher(目标字符串)获取 Matcher 对象- 调用
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());
}
}
}
六、总结
String不可变,基础操作用自带方法,校验、分割、替换可用内置正则方法;- 正则是字符匹配规则,Java 中反斜杠必须转义
\\; - 简单匹配用
String.matches/split/replaceAll,需要批量提取内容使用Pattern+Matcher; matches()全串匹配,find()分段查找,group()获取匹配到的内容。
更多推荐

所有评论(0)