我得到了一个字符串并将其转换为二维数组。
给出的字符串是 *23**23412341_3*
我编写的将其转换为二维数组的代码是:
public String[][] str2arr(String str)
{
String[] rows = str.split("(?<=\\G....)"); // split the string at every 4th character
String[][] matrix = new String[rows.length][];
int r = 0;
for (String row : rows)
{
matrix[r++] = row.split("(?<=\\G.)"); // split each of the string of each row
}
return matrix;
}
此代码给出的结果类似于 [[*, 2, 3, *], [*, 2, 3, 4], [1, 2, 3, 4], [1, _, 3, *]]
我把它格式化为
*23*
*234
1234
1_3*
使用此代码:
public void printMatrix(String[][] x)
{
for (int i=0; i < x.length; i++)
{
for (int j=0; j<x[0].length; j++)
{
System.out.print(x[i][j] + "");
}
System.out.print("\n");
}
}
但现在我得到了第二个字符串,需要将其显示在矩阵的一侧(右侧),而不是第一个矩阵的底部。
*23* *23*
*234 *234
1234 1234
1_3* 1_3*
这可能吗?如果没有,为什么不,我该如何更新此代码才能实现我的目标。
最佳答案
你不能按照你的要求去做。但您可以改为并排打印两个矩阵。
创建一个包含所有矩阵的类。这将假设所有矩阵都具有相同的维度:
public class MatrixHolder {
private List<String[][]> matrices = new ArrayList<>();
public void addMatrix(String[][] matrix) {
matrices.add(matrix);
}
public void printMatirces() {
for(int i = 0; i < matrices.get(0).length; i++) {
for(int j = 0; j < matrices.size(); j++) {
System.out.print(rowString(matrices.get(j)[i]) + " ");
}
System.out.println();
}
}
private static String rowString(String[] row) {
StringBuilder sb = new StringBuilder();
for(String s : row)
sb.append(s);
return sb.toString();
}
}
这是一个如何使用它的例子:
String input = "*23**23412341_3*";
MatrixHolder mh = new MatrixHolder();
mh.addMatrix(str2arr(input));
mh.printMatirces();
System.out.println();
mh.addMatrix(str2arr(input));
mh.printMatirces();
输出:
*23*
*234
1234
1_3*
*23* *23*
*234 *234
1234 1234
1_3* 1_3*
关于java - 如何打印彼此相邻的二维数组矩阵的格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104993/