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 } }
代码逐行解释
边界条件处理
if (input == null || input.isEmpty() || n <= 0) { return input; }先拦截异常输入:如果字符串为空/
null,或者分割长度n小于等于0,直接返回原输入,避免后续逻辑触发越界或无效操作。StringBuilder初始化
StringBuilder result = new StringBuilder();用
StringBuilder拼接结果而非直接用String的+号,是因为String是不可变对象,每次+拼接都会生成新的String实例,频繁操作会浪费内存且效率低;StringBuilder是可变字符序列,所有追加操作都在原有对象上修改,性能更优。循环截取子串
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)时才添加空格,避免结果末尾多一个无效空格。
- 循环变量
返回结果
return result.toString();把
StringBuilder转换成String类型返回,匹配方法的返回值要求。
关于split()方法的说明
你之前尝试的split()方法,核心是按指定分隔符(或正则表达式)拆分字符串,比如按逗号、空格拆分,或者按复杂规则拆分,但它并不适合这种「固定长度分割」的场景。因为split()的逻辑是找分隔符的位置,而非按固定长度截取,强行用正则实现(比如(?<=\\G.{3}))不仅可读性差,还不容易理解原理,不如直接循环截取直观。
内容的提问来源于stack exchange,提问作者Ama123ture
相关产品推荐
相关产品推荐

