java中手机号中间四位替换为星号常用字符串截取拼接(推荐)或正则表达式:前者校验11位数字后取substring(0,3)和substring(7),拼接“**”;后者用replaceall("(d{3})d{4}(d{4})","$1****$2")实现。

Java 中将手机号中间四位替换为星号,常用做法是用字符串截取 + 拼接,或使用正则表达式。核心思路是保留前3位和后4位,中间4位替换成 ****。
方法一:字符串截取拼接(推荐,简单直观)
适用于固定11位手机号,安全、高效、无正则开销:
- 先校验字符串长度是否为11,避免越界
- 用 substring(0, 3) 取前三位
- 用 substring(7) 取第8位开始的后四位(即索引7到末尾)
- 中间拼上 "****"
示例代码:
public static String maskMobile(String mobile) {
if (mobile == null || mobile.length() != 11 || !mobile.matches("\d{11}")) {
return mobile; // 非法输入直接返回原值
}
return mobile.substring(0, 3) + "****" + mobile.substring(7);
}
方法二:正则表达式替换(灵活,适合复杂规则)
用 replaceAll() 匹配11位数字的中间4位:
- 正则:"(\d{3})\d{4}(\d{4})" —— 分组捕获前后各3/4位
- 替换为:$1****$2 —— 引用分组 + 星号
- 注意:需双重转义,Java 字符串中写成 "(\\d{3})\\d{4}(\\d{4})"
示例代码:
public static String maskMobileByRegex(String mobile) {
if (mobile == null) return mobile;
return mobile.replaceAll("(\d{3})\d{4}(\d{4})", "$1****$2");
}
补充说明
- 若手机号带 +、- 或空格(如 "+86 138 1234 5678"),建议先用 replaceAll("\D", "") 提纯为纯数字再处理
- 生产环境建议加空值、长度、非数字校验,避免运行时异常
- 如需支持其他脱敏格式(如只掩码后四位、或按运营商号段区分),可扩展判断逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











