Java:将一维数组输出为多维数组String

时间:2018-06-15 11:22:21

标签: java arrays string format

Bassicaly我从其他工具获得的数据是:

  1. 包含所有String元素的一维数组
  2. 一个整数数组,表示上述数组的维数和每个维的大小。
  3. 我需要创建一个代码,将数组作为多维数组打印到文件中。

    例如我得到:

    Integer[] dimensions = dimensions(array);// let us consider it being {2,3}
    

    和一个带有6个字符串的一维数组   {A,B,C,d,E,F}
    我需要像这样输出:

    {
       {
        a,
        b,
        c,
       }
       {
        d,
        e,
        f,
       }
    }
    

    到目前为止,我的尝试是这样的:

    private String brackets(Integer[] dimensions, String[] array)
    {
    
        for (int j = dimensions.length - 1; j >= 0; j--)
        {
            int i = 0;
            int k = 0;
            while (i < array.length - 1)
            {
                if (k == dimensions[j] - 1)
                {
                    array[i] = array[i] + "}\n";
                    k = 0;
                }
                if (k == 0)
                    array[i] = "{\n" + array[i];
                k++;
                i++;
            }
        }
        return Arrays.toString(array);
    }
    

    有人有更好的选择吗?

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用整数除法和模数基于内部数组的大小(在您的情况下为3)。例如:

private String[][] brackets(Integer[] dimensions, String[] array){
  int arrayLength = array.length;
  int rows = dimensions[0];
  int columns = dimensions[1];

  String[][] result = new String[rows][columns];
  for(int i=0; i<array.length; i++){
    result[i / columns][i % columns] = array[i];
  }
  return result;
}

Try it online.

循环迭代将项目放在2D索引处:
- i=0[i/3][i%3]将为[0][0] = "a" - i=1[i/3][i%3]将为[0][1] = "b" - i=2[i/3][i%3]将为[0][2] = "c" - i=3[i/3][i%3]将为[1][0] = "d" - i=4[i/3][i%3]将为[1][1] = "e" - i=5[i/3][i%3]将为[1][2] = "f"

至于以您提供的格式将所有内容放在新行中,我会创建一个新方法将String-matrix转换为此输出:

private String prettyPrint(String[][] matrix){
  String result = "{\n";
  for(String[] array : matrix){
    result += " {\n";
    for(String item : array)
      result += "  " + item + ",\n";
    result += " }\n";
  }
  result += "}";
  return result;
}

Try it online.

答案 1 :(得分:0)

您可以根据需要修改Array.toString(oneDArr []): 例如:

   public static String printArray(String[] a) {
        if (a == null)
            return "null";
        int iMax = a.length - 1;
        if (iMax == -1)
            return "{}";

        StringBuilder b = new StringBuilder();
        b.append('{').append("\n");
        for (int i = 0; ; i++) {
            b.append("  ").append(a[i]);
            if (i == iMax)
                return b.append("\n").append(" }").toString();
            b.append(", ").append("\n");
        }
    }

然后,调用它并在循环中传递一维行:

        String str[][] = {{"a","b","c"},{"d","e","f"},{"g","h","i"}};
        System.out.println("{");
        for (int i=0; i< nrow; i++) {
            System.out.println(" " + Test.printArray(str[i]));
        }
        System.out.println("}");

应该给:

{
 {
  a, 
  b, 
  c
 }
 {
  d, 
  e, 
  f
 }
 {
  g, 
  h, 
  i
 }
}