如何将数字矩阵字符串转换为二维数组?解决多位数处理问题
问题:将数字矩阵字符串转换为二维数组(处理多位数)
需求:把表示数字矩阵的字符串转换成二维数组,例如输入字符串 "1 2 3\n4 5 6\n10 20 30",期望输出对应的二维数组,需正确识别10、20这类多位数。
我尝试编写了如下代码,但无法处理多位数的数字:
int rowCount = 1; int colCount = 0; for (int i = 0; i < matrixAsString.length(); i++) { if (matrixAsString.charAt(i) != ' ') { colCount++; if (Character.isISOControl(matrixAsString.charAt(i))) { rowCount++; colCount = 0; } } } this.rowCount = rowCount; this.colCount = colCount; int i = 0; this.matrix = new int[rowCount][colCount]; for (int row = 0; row < rowCount; row++) { for (int col = 0; col < colCount; col++) { while (i <= matrixAsString.length()) { if (matrixAsString.charAt(i) != ' ' && !Character.isISOControl(matrixAsString.charAt(i))) { this.matrix[row][col] = Character.getNumericValue(matrixAsString.charAt(i)); i++; break; } else { i++; } } } }
解决方法
你的代码核心问题是逐个字符读取数字,只能识别单个数字字符,无法把连续的数字字符(比如"10")组合成完整的多位数;同时计算行列数的逻辑会把多位数的每个字符都算作一列,导致行列数统计错误。
推荐用字符串拆分的方法,逻辑更简洁,还能自动处理多位数:
实现代码
public class MatrixConverter { private int[][] matrix; private int rowCount; private int colCount; public MatrixConverter(String matrixAsString) { // 按换行符拆分出每一行 String[] rowStrings = matrixAsString.split("\n"); rowCount = rowStrings.length; if (rowCount == 0) { matrix = new int[0][0]; colCount = 0; return; } // 拆分第一行得到列数 String[] firstRowNums = rowStrings[0].split(" "); colCount = firstRowNums.length; matrix = new int[rowCount][colCount]; // 遍历每一行,转换为数字填充到数组 for (int row = 0; row < rowCount; row++) { String[] numStrings = rowStrings[row].split(" "); for (int col = 0; col < colCount; col++) { // 将完整的数字字符串转为int,自动处理多位数 matrix[row][col] = Integer.parseInt(numStrings[col]); } } } // 打印矩阵的辅助方法 public void printMatrix() { for (int[] row : matrix) { for (int num : row) { System.out.print(num + " "); } System.out.println(); } } public static void main(String[] args) { String input = "1 2 3\n4 5 6\n10 20 30"; MatrixConverter converter = new MatrixConverter(input); converter.printMatrix(); } }
代码说明
- 拆分行:用
split("\n")把输入字符串拆分成每行的字符串数组,直接得到准确的行数。 - 拆分数字:对每行字符串用
split(" ")拆分出单个数字的字符串,直接得到准确的列数。 - 转换数字:用
Integer.parseInt()把完整的数字字符串转为int,自动处理多位数,无需手动拼接字符。
运行代码后,输入示例的输出为:
1 2 3 4 5 6 10 20 30
内容的提问来源于stack exchange,提问作者Sourav Borah
相关产品推荐
相关产品推荐

