【问题标题】:How to print two dimensional array of strings as String如何将二维字符串数组打印为字符串
【发布时间】:2011-01-24 17:57:16
【问题描述】:

我知道如何对一维字符串数组执行toString 方法,但是如何打印二维数组?对于 1D,我是这样做的:

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,因为它支持所有相同的操作,但速度更快,因为它不执行任何操作同步。

标签: java string multidimensional-array


【解决方案1】:

两个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]);
    }
}

【讨论】:

    【解决方案2】:

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

    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(..),因为它返回对 self 的引用!可用时使用语法糖。

    重要提示2:因为在这种情况下,您计划将许多东西附加到StringBuffer,因此最好估计容量以避免在附加期间多次分配和重新定位数组,您可以计算多维数组的大小乘以您计划追加的元素的平均字符长度。

    【讨论】:

    • 方法链与语法糖无关;它是 API 功能,而不是语言功能。否则,+1。
    • 您可以使用不同步的 StringBuilder,在某些情况下可能会更快
    • 是的,我知道。语法糖应该考虑语言的语法(语法),而这只是类的一种方法..但我没有想到其他术语,将其视为一种诗意的许可:)
    【解决方案3】:
    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"}}。在我看来,技术不好。
    【解决方案4】:

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

     

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

    给予

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

    【讨论】:

      【解决方案5】:
      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();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-15
        • 2021-07-31
        • 2013-08-07
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        相关资源
        最近更新 更多