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

Posted

技术标签:

【中文标题】如何将二维字符串数组打印为字符串【英文标题】: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,因为它支持所有相同的操作,但速度更快,因为它不执行任何操作同步。 【参考方案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 类定义了几个有用的方法

Arrays.toString - 不适用于嵌套数组 Arrays.deepToString - 完全符合您的要求

 

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();
    

【讨论】:

以上是关于如何将二维字符串数组打印为字符串的主要内容,如果未能解决你的问题,请参考以下文章

打印出二维字符串数组的函数[重复]

如何在二维字符数组中找到相同字符的菱形?

将字符分配给在 C 中使用 malloc 声明的二维数组时收到警告

C#:如何将多个字符串拆分为二维数组?

如何从文件中加载二维字符数组并使用 ncurses.h 在 C 中使用 mvprintw() 打印它?

如何将字符串放置在二维数组中随机选择的位置