如何在彼此相邻的位置打印格式化的二维数组矩阵字符串

时间:2016-05-08 21:26:23

标签: java arrays matrix multidimensional-array formatting

我给了一个字符串并将其转换为2D数组。 给出的字符串是*23**23412341_3*

我编写的将其转换为2D数组的代码是:

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*

这可能吗?如果没有,为什么不,如何更新此代码,以便达到我的目标。

2 个答案:

答案 0 :(得分:1)

你不能做你所要求的。但你可以改为,并排打印两个矩阵。

创建一个包含所有矩阵的类。这将假设所有矩阵具有相同的尺寸:

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* 

答案 1 :(得分:0)

您可以绑定String [] [] x,然后显示绑定的xes。

public String[][] cbind(String[][] x1, String[][] x2) {


        String[][] output = new String[x1.length][x2[0].length +x2[0].length];

        for (int i = 0; i < x1.length; i++) {

            for (int j = 0; j < x1[0].length; j++) {

                output[i][j] = x1[i][j];

            }

            for (int j = 0; j < x2[0].length; j++) {

                output[i][j + x1[0].length] = x2[i][j];
            }

        }

        return output;
    }