Java:将一维数组作为多维数组字符串输出

Java:将一维数组作为多维数组字符串输出,java,arrays,string,format,Java,Arrays,String,Format,基本上,我从另一个工具获得的数据如下: 包含所有字符串元素的一维数组 一个整数数组,表示上述数组的维数和每个维数的大小 我需要制作一个代码,将数组作为多维数组打印到文件中 例如,我得到: Integer[] dimensions = dimensions(array);// let us consider it being {2,3} 以及一个具有6个字符串的一维数组。 {a,b,c,d,e,f} 我需要这样输出: { { a, b, c, } {

基本上,我从另一个工具获得的数据如下:

  • 包含所有字符串元素的一维数组
  • 一个整数数组,表示上述数组的维数和每个维数的大小
  • 我需要制作一个代码,将数组作为多维数组打印到文件中

    例如,我得到:

    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);
    }
    
    专用字符串括号(整数[]维,字符串[]数组)
    {
    对于(int j=dimensions.length-1;j>=0;j--)
    {
    int i=0;
    int k=0;
    而(i

    有人有更好的选择吗?

    一个可能的解决方案是根据内部数组的大小使用整数除法和模运算(
    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;
    }
    

    您可以根据需要修改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("}");
    

    欢迎来到堆栈溢出!不幸的是,您的问题只包含需求-它并没有显示您自己为解决此问题所做的任何努力。请添加您对此问题的尝试-因为此网站不是免费的“我们为您(家庭)工作”服务。除此之外:请转到第页了解如何/问什么。谢谢你能提供输入和结果输出吗?目前的情况是(是的我用Java生成C代码:我用Java生成C代码:是的我用Java生成C代码):const u16 nc'16 nc'16 nc_fififid fid fiu Fi提供输入和结果结果输出?你能提供输入和结果输出?你能提供输入和结果输出?当前的情况是:当前的情况是(是)是(是我(是我是我用我用我用我用我用Java代码生成的)的输入是:Cont u16 N16 nc 16 nc 16 nc'16 nc_Fiu Fififid fid fid fid fid fid fid fid fid_fid 2 2_fid 2_fid 2_fid 222_Fiu Fiduu 2222222_23_2_222322232233ID_fid_2D_3_2_0},FiMConf_FiMFID_FID_2D_3_2_1];输入是由6个字符串组成的数组:{FiMConf_FiMFID_FID_2D_3_2_0,…。请将其编辑到您的问题中,而不是在评论中发布。我认为这没有用,我需要在java中声明一个多维数组,并具有运行时确定的维度数。@SMarius如果您的意思是
    [2][3]中的
    3
    是已知的
    2
    ,我对我的答案进行了编辑。@SMarius我重新阅读了你的问题,现在我看到你有
    维度
    {2,3}
    作为输入。那样的话就容易多了。我再次编辑了我的答案,这次应该会更有帮助。是的……我的错误,但我也可以得到类似这样的输入:{2,3,4…},我不知道Integer[]维度有多少个元素。我在问题中发布的代码中发现了一些错误,不幸的是,该工具需要花费大量时间才能运行。@SMarius我还添加了一个关于以您所述格式打印它的部分。至于允许
    {2,3,4,…}的维度
    我有点搞不清楚预期的输出会变成什么
            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
     }
    }