我需要将表示数字矩阵的字符串转换为二维数组。
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++;
}
}
}
}
此代码使用换行符将输入字符串拆分为行 ,然后使用空格字符“”将每一行拆分为单独的数字。然后使用 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 + " ");
}
}
这是一个使用 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]