Java 1.8环境下:二维数组字符串转二维int数组的流与非流实现
Java 1.8 下二维数组字符串转int数组的优化实现方案
非Stream流的优化实现
针对原代码硬编码数组长度、字符串处理冗余的问题,优化后的实现如下:
private static int[][] convertMatrixWithoutStream() { String mat = "[0, 10, 0, 5, 4],\n" + "[1, 3, 10, 2, 8],\n" + "[1, 8, 1, 6, 3],\n" + "[4, 10, 2, 3, 5],\n" + "[9, 0, 9, 1, 0]"; // 移除所有空白字符(换行、空格),清理末尾多余逗号 String cleaned = mat.replaceAll("\\s+", "").replaceAll(",$", ""); // 截取掉最外层的方括号,按"],["分割得到每行数字字符串 String[] rowStrs = cleaned.substring(1, cleaned.length() - 1).split("],\\["); int[][] matrix = new int[rowStrs.length][]; for (int i = 0; i < rowStrs.length; i++) { String[] numStrs = rowStrs[i].split(","); int[] row = new int[numStrs.length]; for (int j = 0; j < numStrs.length; j++) { row[j] = Integer.parseInt(numStrs[j]); } matrix[i] = row; } return matrix; }
优化点:
- 动态计算数组长度,避免硬编码数值,适配不同规模的输入
- 简化字符串处理逻辑:通过一次截取去掉外层方括号,减少多次替换操作
- 无需处理分割后的空元素,避免原代码中
matarr.length-1的冗余判断
基于Stream流的实现(Java 1.8)
利用Java 1.8 Stream API,实现更简洁的链式转换:
private static int[][] convertMatrixWithStream() { String mat = "[0, 10, 0, 5, 4],\n" + "[1, 3, 10, 2, 8],\n" + "[1, 8, 1, 6, 3],\n" + "[4, 10, 2, 3, 5],\n" + "[9, 0, 9, 1, 0]"; String cleaned = mat.replaceAll("\\s+", "").replaceAll(",$", ""); return Arrays.stream(cleaned.substring(1, cleaned.length() - 1).split("],\\[")) .map(rowStr -> Arrays.stream(rowStr.split(",")) .mapToInt(Integer::parseInt) .toArray()) .toArray(int[][]::new); }
实现逻辑:
- 清理输入字符串,移除空白字符并修正格式
- 将字符串分割为行级数字字符串流
- 每行进一步分割为单个数字字符串,映射为int流并转换为int数组
- 最后收集所有行数组为二维int数组
注:若输入存在格式异常,可添加try-catch块处理转换失败的情况。
内容的提问来源于stack exchange,提问作者user63898
相关产品推荐
相关产品推荐

