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

Java实现字符串按n个字符分组并以空格分隔的方法

Java实现按指定长度分割字符串并添加空格分隔

完整实现代码

public class StringSplitter {
    public static String splitStringByLength(String input, int n) {
        // 处理边界情况:输入为空或n不合法时直接返回原字符串
        if (input == null || input.isEmpty() || n <= 0) {
            return input;
        }

        StringBuilder result = new StringBuilder();
        int length = input.length();
        // 循环截取每n个字符的子串
        for (int i = 0; i < length; i += n) {
            // 确定当前截取的结束索引,避免超出字符串长度
            int endIndex = Math.min(i + n, length);
            // 截取子串并追加到结果中
            result.append(input.substring(i, endIndex));
            // 如果不是最后一组,添加空格分隔
            if (endIndex != length) {
                result.append(" ");
            }
        }
        return result.toString();
    }

    public static void main(String[] args) {
        // 测试示例
        String input = "THISISFUN";
        int n = 3;
        System.out.println(splitStringByLength(input, n)); // 输出:THI SIS FUN
    }
}

代码逐行解释

  1. 边界条件处理

    if (input == null || input.isEmpty() || n <= 0) {
        return input;
    }
    

    先拦截异常输入:如果字符串为空/null,或者分割长度n小于等于0,直接返回原输入,避免后续逻辑触发越界或无效操作。

  2. StringBuilder初始化

    StringBuilder result = new StringBuilder();
    

    用StringBuilder拼接结果而非直接用String的+号,是因为String是不可变对象,每次+拼接都会生成新的String实例,频繁操作会浪费内存且效率低;StringBuilder是可变字符序列,所有追加操作都在原有对象上修改,性能更优。

  3. 循环截取子串

    for (int i = 0; i < length; i += n) {
        int endIndex = Math.min(i + n, length);
        result.append(input.substring(i, endIndex));
        if (endIndex != length) {
            result.append(" ");
        }
    }
    
    • 循环变量i从0开始,每次步进n,代表当前要截取的子串的起始索引。
    • endIndex用Math.min(i + n, length)计算:如果i + n超过字符串总长度,就用字符串长度作为结束索引,避免substring方法抛出越界异常。
    • input.substring(i, endIndex)截取左闭右开区间的子串(包含i位置字符,不包含endIndex位置字符),然后追加到result中。
    • 只有当当前截取的不是最后一组(endIndex != length)时才添加空格,避免结果末尾多一个无效空格。
  4. 返回结果

    return result.toString();
    

    把StringBuilder转换成String类型返回,匹配方法的返回值要求。

关于split()方法的说明

你之前尝试的split()方法,核心是按指定分隔符(或正则表达式)拆分字符串,比如按逗号、空格拆分,或者按复杂规则拆分,但它并不适合这种「固定长度分割」的场景。因为split()的逻辑是找分隔符的位置,而非按固定长度截取,强行用正则实现(比如(?<=\\G.{3}))不仅可读性差,还不容易理解原理,不如直接循环截取直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:50:33