【问题标题】:Merge two multidimensional string arrays in Java在Java中合并两个多维字符串数组
【发布时间】:2012-11-04 18:30:23
【问题描述】:

我(至少)有两个多维字符串数组(维度不相等),我试图将它们并排放置。也就是说,

String[][] arrayOne 包含以下内容:

aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa

...String[][] arrayTwo 包含以下内容:

bbbbbbbb
bbbbbbbb
bbbbbbbb
bbbbbbbb

...而String[][] arrayThree 包含以下内容:

ccccccc
ccccccc
ccccccc
ccccccc
ccccccc
ccccccc
ccccccc
ccccccc

我一直未能成功地尝试创建一个返回以下内容的方法(最好作为多维字符串数组,但也可以作为字符串工作):

String[][] result 包含以下内容:

               ccccccc
               ccccccc
aaaaa          ccccccc
aaaaa          ccccccc
aaaaa          ccccccc
aaaaa bbbbbbbb ccccccc
aaaaa bbbbbbbb ccccccc
aaaaa bbbbbbbb ccccccc
aaaaa bbbbbbbb ccccccc

所以基本上,该方法会将数组并排放置,将它们全部对齐到底部,然后将它们组合成一个数组。

到目前为止,我解决此问题的复杂尝试只会产生更多错误,而尝试使用 println 语句等进行调试只会让我更加困惑。而且我认为有人知道完成这项任务的相当简单的方法。

如果有人知道,将不胜感激!!!

*编辑 - * 示例 #2:

aaaa            bbb            ccccc                       ccccc
aaaa   'plus'   bbb   'plus'   ccccc   'yields'   aaaa     ccccc
aaaa                           ccccc              aaaa bbb ccccc
                               ccccc              aaaa bbb ccccc

【问题讨论】:

  • 我们能看到你努力中的那些错误吗?
  • 请发送您尝试过的代码
  • 您的arrayOnearrayTwoarrayThree 似乎是一维的。
  • 抱歉,我忘了说每个字母都是每个数组中的一个元素(如果有帮助的话)。
  • 在您的最终数组中,您是否希望空格只包含null

标签: java arrays string multidimensional-array


【解决方案1】:

您的问题的(未经测试的)通用解决方案:

编辑: 感谢@Paul Bellora 的测试和确认。

public static <T> T[][] mergeArrays(Class<T> clazz, T[][]... arrays) {
    // determine length of 1st dimension.
    int dim1 = 0;
    for (T[][] arr : arrays) {
        dim1 += arr.length;
    }
    // Create new 2Dim Array
    T[][] result = (T[][]) Array.newInstance(clazz, dim1, 0);
    // Fill the new array with all 'old' arrays
    int index = 0;
    for (T[][] arr : arrays) {
        for (T[] array : arr) {
            // changes within your old arrays will reflect to merged one
            result[index++] = array;
        }
    }
    return result;
}

这就是你的称呼:

    String[][] one = // your 1st array here;
    String[][] two = // your 2nd array here;
    String[][] three = // your 3rd array here;
    String[][] four = // your 4th array here;
    // This works with an arbitrary amount of arrays.
    String[][] merged1 = mergeArrays(String.class, one, two, three);
    String[][] merged2 = mergeArrays(String.class, one, two, three, four);

【讨论】:

  • 我从来没有处理过 (我不是 java 专家 :]),所以,你认为你可以为多维字符串数组重写它吗?感谢您的帮助!
  • @iphonedev7 在你的情况下多维 = 二维
  • 您实际上可以通过将所有T[] 替换为T(并将T[][] 替换为T[])来进一步概括mergeArrays,并将Array.newInstance(clazz, dim1, 0) 更改为Array.newInstance(clazz, dim1)。然后你会打电话给mergeArrays(String[].class, arrayOne, arrayTwo, arrayThree)
  • @iphonedev7 你真的应该投票并接受这个答案,然后如果你不知道如何打印数组的内容,请询问一个新的。
  • @iphonedev7 这是一个非常重要的问题,因为您要打印的内容会旋转。创建一个新帖子符合您的最大利益,因为新一波的人会看到它,而不仅仅是 jlordo 和我在这个评论线程中(坦率地说,我已经准备好继续前进了)。
【解决方案2】:

根据要求,只是一个String 版本,尚未测试:

public static String[][] mergeStringArrays(String[][]... arrays) {
    // determine length of 1st dimension.
    int dim1 = 0;
    for (String[][] arr : arrays) {
        dim1 += arr.length;
    }
    // Create new 2Dim Array
    String [][] result = new String[dim1][];
    // Fill the new array with all 'old' arrays
    int index = 0;
    for (String[][] arr : arrays) {
        for (String[] array : arr) {
            // changes within your old arrays will reflect to merged one
            result[index++] = array;
        }
    }
    return result;
}

看我的第一个答案,看看如何调用这个方法。

【讨论】:

  • 我正在尝试将我的组合数组打印为字符串,但它似乎有错误。您知道如何将数组转换为字符串(带有换行符和所有内容)??? (虽然我已经弄清楚了,但也许我不明白你的方法如何运作得足够好)
  • Arrays.deepToString(yourMergedArray); 呢?
  • 没关系,它们仍然相互打印出来(即使我使用我原来的方法,正如你上面建议的那样)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 2020-08-10
  • 2019-08-06
  • 2015-12-27
  • 2021-05-12
  • 2011-11-26
相关资源
最近更新 更多