在 Java 开发中,正则表达式是处理字符串匹配、查找、替换的神器,尤其在数据清洗、格式校验、文本处理场景中不可或缺。今天我们通过一道经典的编程题 ——匹配并替换字符串中的 IP 地址,从零拆解正则表达式的核心用法,掌握Pattern和Matcher类的实战技巧。

给定字符串 登录网站: 222.128.89.253,完成两个核心任务:
202.192.78.56,输出替换后的结果。同时需要补全代码模板中的【代码 1】和【代码 2】,实现完整功能。
首先给出修正并补全后的最终代码(原类名与文件名不一致,已统一为ReplaceIP.java):
import java.util.regex.*;
public class ReplaceIP {
public static void main(String args[]) {
String str = "登录网站: 222.128.89.253";
Pattern pattern;
Matcher matcher;
// 正则表达式:匹配标准IPv4地址
String regex = "[d]{1,3}[.][d]{1,3}[d]{1,3}[.][d]{1,3}";
// 代码1:初始化Pattern模式对象(编译正则表达式)
pattern = Pattern.compile(regex);
// 代码2:初始化Matcher匹配对象(绑定字符串与模式)
matcher = pattern.matcher(str);
String IP = "";
// 循环查找所有匹配的子串
while (matcher.find()) {
IP = matcher.group(); // 获取匹配到的IP地址
System.out.print(matcher.start() + "位置出现:"); // 获取匹配起始索引
System.out.println(IP);
}
System.out.printf("将%s 替换为 202.192.78.56n", IP);
// 替换所有匹配到的内容
String result = matcher.replaceAll("202.192.78.56");
System.out.println(result);
}
}
5位置出现:222.128.89.253 将222.128.89.253 替换为 202.192.78.56 登录网站: 202.192.78.56
Java 处理正则表达式的 API 位于java.util.regex包下,核心是两个类:Pattern(模式类) 和 Matcher(匹配器类)。
Pattern.compile(String regex) —— 静态方法,编译正则表达式,返回Pattern对象(对应题目【代码 1】)。Pattern是不可变类,线程安全,一个模式对象可重复使用。pattern.matcher(CharSequence input) —— 创建Matcher对象(对应题目【代码 2】)。find():扫描字符串,查找下一个匹配的子串,找到返回true;group():获取最近一次匹配到的子串;start():获取匹配子串的起始索引;replaceAll(String replacement):替换所有匹配到的子串。题目中的正则:[d]{1,3}[.][d]{1,3}[.][d]{1,3}[.][d]{1,3} 逐部分拆解:
[d]:匹配0-9 的数字(d是数字的转义写法);{1,3}:限定前面的字符出现 1~3 次(IP 地址每段数字范围 0-255,最多 3 位);[.]:匹配点号.(正则中.是通配符,必须用[]或转义);数字.数字.数字.数字格式的字符串,完美适配 IPv4 地址。Pattern.compile(regex) 生成模式对象,避免重复编译提升效率;pattern.matcher(str) 将字符串与正则绑定;matcher.find() 遍历所有匹配项,group()获取匹配内容,start()获取位置;replaceAll() 一次性替换所有匹配到的 IP 地址。ReplaceErrorWord.java,但类名是ReplaceIP,Java 要求类名必须与文件名完全一致,否则编译报错;.在正则中是通配符,直接写会匹配任意字符,必须用[.]或.转义;Matcher使用顺序:必须先调用find()匹配成功,才能调用group()/start(),否则会抛异常;replaceAll作用域:替换的是所有匹配项,如果只想替换第一个,用replaceFirst()。题目中的正则能匹配基础 IP,但无法校验 IP 合法性(比如999.999.999.999也会匹配),优化后的标准 IPv4 正则:
String regex = "((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)";
这个正则会严格限制每段数字为0-255,适合生产环境使用。
通过这道题,我们掌握了 Java 正则表达式的标准使用流程:
Pattern对象 → 3. 创建Matcher匹配器 → 4. 执行查找 / 替换操作。Pattern+Matcher是 Java 正则的核心组合,熟练掌握后,无论是手机号、邮箱、IP 格式校验,还是字符串批量替换,都能轻松搞定!
以上就是Java使用正则表达式匹配并替换字符串中的IP地址的详细内容,更多关于Java正则表达式匹配并替换IP地址的资料请关注本站其它相关文章!
您可能感兴趣的文章: