字符串先按'E'再按空格拆分后,如何返回String[][]?
解决字符串拆分的二维数组返回问题
你的核心问题在于循环中过早return导致只返回第一个子数组,以及没有用合适的容器存储所有拆分结果。下面是具体的解决思路和代码实现:
思路分析
- 先按
E拆分原字符串,得到一级子串数组 - 遍历每个一级子串,处理掉前后多余的空格(避免拆分出空字符串),再按空格拆分得到二级子数组
- 用一个集合(比如
List<String[]>)来收集所有二级子数组,最后转成String[][]返回
完整代码实现
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class StringSplitDemo { public static void main(String[] args) { String str = "30 3 3 11 5 2 2 7 9 2 1 20 E 21 2 2 11 14 5 2 1 7 3 6 E 30 4 3 11 5 21 2 15 20 3 17 9 5 1 32 E"; // 第一步:按'E'拆分原字符串 String[] firstSplit = str.split("E"); // 用List动态存储所有拆分后的子数组 List<String[]> resultList = new ArrayList<>(); for (String subStr : firstSplit) { // 去除子串前后的空格,避免拆分出无效空元素 String trimmedSub = subStr.trim(); // 跳过拆分后为空的子串(比如原字符串末尾的'E'产生的空串) if (trimmedSub.isEmpty()) { continue; } // 按任意数量的空格拆分(\\s+匹配一个或多个空白字符,兼容多空格场景) String[] secondSplit = trimmedSub.split("\\s+"); // 将当前子数组加入集合 resultList.add(secondSplit); } // 将List转换为目标二维数组 String[][] finalResult = resultList.toArray(new String[0][]); // 验证输出结果 for (String[] arr : finalResult) { System.out.println(Arrays.toString(arr)); } } }
关键细节说明
- 取消过早return:你之前的代码在循环内直接
return,导致只返回第一个子数组,必须把所有结果收集完成后再统一返回 - 优化空格拆分逻辑:用
trim()清理子串前后空格,再用split("\\s+")替代split(" "),可以处理连续多空格的情况,不会产生空字符串元素 - 过滤无效空串:原字符串末尾的
E会拆分出空串,通过isEmpty()判断后跳过,避免向结果中添加无效的空数组
运行这段代码后,得到的finalResult就是你期望的二维数组结构啦!
内容的提问来源于stack exchange,提问作者gqli
相关产品推荐
相关产品推荐

