Java字符串如何按固定长度分组并插入空格

来源:编程学习作者:上海GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《Java字符串如何按固定长度分组并插入空格》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java字符串如何按固定长度分组并插入空格》有用,将其分享出去将是对创作者最好的鼓励。

在Java开发中,经常会遇到需要将长字符串按照固定长度分组,并且在每组之间插入空格的场景,比如格式化银行卡号、手机号、身份证号等展示内容,让内容更易读。下面介绍几种常见的实现方式,开发者可以根据实际需求选择使用。

Java字符串如何按固定长度分组并插入空格

方案一:使用循环截取实现

这种方式逻辑比较直观,通过循环每次截取固定长度的子串,拼接时加入空格即可,适合所有Java版本,兼容性最好。

public class StringGroupUtil {
    /**
     * 按固定长度分组字符串并插入空格
     * @param origin 原始字符串
     * @param groupSize 每组长度
     * @return 分组后的字符串
     */
    public static String groupByLength(String origin, int groupSize) {
        if (origin == null || origin.isEmpty() || groupSize <= 0) {
            return origin;
        }
        StringBuilder result = new StringBuilder();
        int length = origin.length();
        for (int i = 0; i < length; i += groupSize) {
            // 截取当前组的子串,避免越界
            int end = Math.min(i + groupSize, length);
            result.append(origin.substring(i, end));
            // 不是最后一组时添加空格
            if (end < length) {
                result.append(" ");
            }
        }
        return result.toString();
    }

    public static void main(String[] args) {
        String cardNo = "6222021234567890123";
        String grouped = groupByLength(cardNo, 4);
        System.out.println(grouped); // 输出:6222 0212 3456 7890 123
    }
}

方案二:使用正则表达式实现

利用正则表达式的零宽度正预测先行断言,可以在每固定长度的位置插入空格,代码更简洁,但是正则匹配的性能会比循环稍低。

public class StringGroupUtil {
    /**
     * 用正则按固定长度分组字符串并插入空格
     * @param origin 原始字符串
     * @param groupSize 每组长度
     * @return 分组后的字符串
     */
    public static String groupByRegex(String origin, int groupSize) {
        if (origin == null || origin.isEmpty() || groupSize <= 0) {
            return origin;
        }
        // 正则含义:匹配后面跟groupSize个非换行字符的位置,插入空格
        String regex = "(?<=\G.{" + groupSize + "})";
        return origin.replaceAll(regex, " ");
    }

    public static void main(String[] args) {
        String phone = "13812345678";
        String grouped = groupByRegex(phone, 3);
        System.out.println(grouped); // 输出:138 123 456 78
    }
}

两种方案对比

我们可以通过下面的表格对比两种实现方式的特点,方便选择:

实现方式优点缺点适用场景
循环截取逻辑清晰,性能好,兼容性强代码量稍多对性能要求高、需要兼容低版本Java的场景
正则表达式代码简洁,一行即可实现正则匹配性能稍低,可读性稍差代码简洁度要求高、字符串长度较短的场景

注意事项

  • 如果原始字符串中包含空格,需要先调用replaceAll("\s+", "")去除空格再处理,避免分组结果不符合预期。
  • 分组长度需要大于0,否则方法会直接返回原始字符串,避免无意义的空分组。
  • 如果原始字符串长度不是分组长度的整数倍,最后一组的长度会小于分组长度,属于正常情况,不需要额外处理。
实际开发中如果分组规则固定,比如固定每4位插入空格,也可以直接写死分组长度,不需要每次传入参数,减少不必要的参数校验逻辑。

Java字符串处理按固定长度分组插入空格substring修改时间:2026-07-20 16:06:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。