如何将二维字符串数组打印为字符串

24

我知道如何为一维字符串数组编写toString方法,但是如何打印一个二维数组呢?对于一维数组,我是这样做的:

public String toString() {
    StringBuffer result = new StringBuffer();
    res = this.magnitude;

    String separator = "";
    if (res.length > 0) {
        result.append(res[0]);
        for (int i=1; i<res.length; i++) {
            result.append(separator);
            result.append(res[i]);
        }
    }
return result.toString();

如何打印一个二维数组?


如果您处于单线程环境中,建议使用StringBuilder类而不是StringBuffer类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。 - Desintegr
5个回答

79

Java的 Arrays 类定义了几个有用的方法

  • Arrays.toString - 该方法不能用于嵌套数组
  • Arrays.deepToString - 此方法恰好能满足您的需求

 

String[][] aastr = {{"hello", "world"},{"Goodbye", "planet"}};
System.out.println(Arrays.deepToString(aastr));

提供

  [[hello, world], [Goodbye, planet]]

10年了,我从未听说过deepToString。Facepalm - Ojonugwa Jude Ochalifu

6

你只需对元素进行两次迭代:

StringBuffer results = new StringBuffer();
String separator = ","
float[][] values = new float[50][50];

// init values

for (int i = 0; i < values.length; ++i)
{
  result.append('[');
  for (int j = 0; j < values[i].length; ++j)
    if (j > 0)
      result.append(values[i][j]);
    else
      result.append(values[i][j]).append(separator);
  result.append(']');
}

重要提示:StringBuffer也很有用,因为您可以链接操作,例如:buffer.append(..).append(..).append(..) ,因为它返回对自身的引用!在可用时使用语法糖。

重要提示2:由于在此情况下您计划将许多内容附加到StringBuffer中,因此很好地估计容量以避免在附加期间多次分配和重新定位数组,您可以通过计算要附加的元素的平均字符长度乘以多维数组的大小来完成。


1
方法链与语法糖无关,它是一个API功能,而不是语言特性。否则,加1。 - polygenelubricants
3
你可以使用StringBuilder,它是非同步的并且在某些情况下可能更快。 - Karussell
是的,我知道这个。语法糖应该涉及到语言的语法,而这只是类的一个方法...但是我脑海中没有其他术语,就把它看作是诗意的自由吧 :) - Jack

2
public static <T> String to2DString(T[][] x) {
    final String vSep = "\n";
    final String hSep = ", ";
    final StringBuilder sb = new StringBuilder();

    if(x != null)
    for(int i = 0; i < x.length; i++) {
        final T[] a = x[i];
        if(i > 0) {
            sb.append(vSep);
        }
        if(a != null)
        for(int j = 0; j < a.length; j++) {
            final T b = a[j];
            if(j > 0) {
                sb.append(hSep);
            }
            sb.append(b);
        }
    }
    return sb.toString();
}

如果数组包含多个相等的引用,那么这就会成为一个问题。例如,使用 new String[][] {{"1", "1"}, {"1", "1"}} 就无法正常工作,因为它们被合并了。在我看来,这是一种不好的技巧。 - polygenelubricants

0
两个for循环:
for (int i=1; i<res.length; i++) {
    for (int j=1; j<res[i].length; j++) {
        result.append(separator);
        result.append(res[i][j]);
    }
}

0
public static void main(String[] args) {

    String array [] [] = {
        {"*","*", "*", "*", "*", "*"},
        {"*"},
        {"*"},
        {"*"},
        {"*","*", "*", "*", "*", "*"},
        {"*"},
        {"*"},
        {"*"},
        {"*"},
        {"*"}};


    for (int row=0; row<array.length;row++) {

        for (int column = 0; column < array[row].length; column++) {
            System.out.print(array[row][column]);
        }
        System.out.println();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接