【问题标题】:How to print a formatted string of 2D array matrices next to each other如何打印彼此相邻的二维数组矩阵的格式化字符串
【发布时间】:2016-09-03 10:51:12
【问题描述】:

我得到一个字符串并将其转换为二维数组。 给出的字符串是*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*

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

【问题讨论】:

    标签: java arrays matrix multidimensional-array formatting


    【解决方案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* 
    

    【讨论】:

    • 太棒了。这不仅允许 2 个矩阵,而且还允许更多,正是我需要的程序可扩展性。干杯!
    【解决方案2】:

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

    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;
        }
    

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      相关资源
      最近更新 更多