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

如何将数字矩阵字符串转换为二维数组?解决多位数处理问题

问题:将数字矩阵字符串转换为二维数组(处理多位数)

需求:把表示数字矩阵的字符串转换成二维数组,例如输入字符串 "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();
    }
}

代码说明

  1. 拆分行:用split("\n")把输入字符串拆分成每行的字符串数组,直接得到准确的行数。
  2. 拆分数字:对每行字符串用split(" ")拆分出单个数字的字符串,直接得到准确的列数。
  3. 转换数字:用Integer.parseInt()把完整的数字字符串转为int,自动处理多位数,无需手动拼接字符。

运行代码后,输入示例的输出为:

1 2 3 
4 5 6 
10 20 30 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:31