2010-03-07 188 views
14

我知道如何做一維字符串數組的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(); 

如何打印二維數組。

+0

如果你是在單線程環境中,'StringBuilder'類一般應優先使用到'StringBuffer',因爲它支持所有相同的操作,但速度更快,因爲它不執行同步。 – Desintegr 2010-03-07 19:23:40

回答

5

你只是重複兩次以上的元素:

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(..)因爲它返回對自我的引用!可用時使用synctactic糖..

IMPORTANT2:因爲在這種情況下,你打算很多東西附加到StringBuffer這是很好的評估能力,以避免追加在分配和重新定位陣列很多次,你可以做到這一點計算多維數組的大小乘以您計劃添加的元素的平均字符長度。

+1

方法鏈與語法糖無關;這是一個API功能,而不是語言功能。否則,+1。 – polygenelubricants 2010-03-07 19:45:19

+3

你可以使用StringBuilder,它不同步,在某些情況下可以更快 – Karussell 2010-03-07 19:52:46

+0

是的,我知道它。 Synctactic糖應該把語言的語法(語法),而這只是一個類的方法..但沒有其他術語進入我的腦海,把它看作是一個詩意的許可:) – Jack 2010-03-08 01:14:49

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]); 
    } 
} 
1
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(); 
} 
+0

這是有問題的,如果數組包含多個引用這是'=='。例如,由於interning,它不會與'new String [] [] {{「1」,「1」},{「1」,「1」}}「一起工作。糟糕的技術,在我看來。 – polygenelubricants 2010-03-07 19:56:22

+0

正確,但在大多數情況下都適用。現在解決。 – Pindatjuh 2010-03-07 19:57:55

53

Arrays的類定義了兩個有用的方法

  • 陣列。 toString - 不適用於嵌套陣列
  • 數組。 deepToString - 這不正是你想要什麼

 

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

給人

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