将表示数字矩阵的字符串转换为二维数组

问题描述 投票:0回答:2

我需要将表示数字矩阵的字符串转换为二维数组。

Input - "1 2 3\n4 5 6\n10 20 30"
output - 1 2 3
         4 5 6
         10 20 30

我尝试了这段代码,但我无法弄清楚如何处理超过 1 位的数字。我知道代码很烂,但请耐心等待,因为我是编程新手,我会尽可能多地从错误中学习。

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++;
                    }
                }
            }
        }
java arrays string matrix multidimensional-array
2个回答
1
投票

此代码使用换行符将输入字符串拆分为行 ,然后使用空格字符“”将每一行拆分为单独的数字。然后使用 Integer.parseInt() 将每个数字转换为整数并创建一个二维数组。

注意在Java中,需要在初始化二维数组之前声明其大小。这里,我们用rows数组的长度来确定行数,用每行的长度来确定列数。

String matrixString = "1 2 3\n4 5 6\n10 20 30";
    
    // Split the string into rows
    String[] rows = matrixString.split("\n");
    
    // Split each row into individual numbers and convert to int
    int[][] matrix = new int[rows.length][];
    for (int i = 0; i < rows.length; i++) {
        String[] numbers = rows[i].split(" ");
        matrix[i] = new int[numbers.length];
        for (int j = 0; j < numbers.length; j++) {
            matrix[i][j] = Integer.parseInt(numbers[j]);
        }
    }
    
    // Print the matrix
    for (int[] row : matrix) {
        for (int num : row) {
            System.out.print(num + " ");
        }
    }

0
投票

这是一个使用 Java 8 流的简单解决方案:

String input = "1 2 3\n4 5 6\n10 20 30";

String[][] output = Arrays.stream(input.split("\n")).map(entry -> entry.split(" ")).toArray(String[][]::new);

查看和验证结果

Arrays.stream(output).forEach(item -> System.out.println(Arrays.toString(item)));

打印结果为

[1, 2, 3]
[4, 5, 6]
[10, 20, 30]
© www.soinside.com 2019 - 2024. All rights reserved.