You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将参数传入的手机号字符串格式化为指定样式?

解决手机号格式转换问题:将"79991111111"转为"+7 (999) 111-11-11"

这里给你两种靠谱的实现方式,专门针对固定11位、以7开头的手机号字符串:

方法一:正则表达式替换

利用正则的分组捕获功能,直接把匹配到的分段替换成目标格式。Java代码示例:

String phoneNumber = "79991111111";
// 捕获分组:第1组是后3位(999),第2组111,第3组11,第4组11
String formattedPhone = phoneNumber.replaceAll("^7(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "+7 ($1) $2-$3-$4");
// 输出结果:+7 (999) 111-11-11

正则说明:

  • ^7:匹配字符串开头的7
  • (\\d{3}):捕获连续3个数字作为分组,一共4个分组对应不同分段
  • $:匹配字符串结尾,确保是完整的11位数字

方法二:String.format结合字符串截取

既然你熟悉String.format(),可以通过截取手机号的不同分段来传参,完全不需要预先知道具体内容:

String phoneNumber = "79991111111";
// 截取各部分:区号、中间三位、倒数前两位、最后两位
String formattedPhone = String.format("+7 (%s) %s-%s-%s",
        phoneNumber.substring(1, 4),
        phoneNumber.substring(4, 7),
        phoneNumber.substring(7, 9),
        phoneNumber.substring(9));

这种方式逻辑更直观,适合对正则不太熟悉的场景。

额外提醒

不管用哪种方法,建议先做输入校验:比如判断字符串长度是否为11,是否全是数字且以7开头,避免非法输入导致的异常。示例校验代码:

if (phoneNumber.matches("^7\\d{10}$")) {
    // 执行格式转换
} else {
    // 处理非法输入,比如抛出异常或提示错误
}

内容的提问来源于stack exchange,提问作者komezh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:27:07