2010-03-07 14 views
14

Ich weiß, wie ToString-Methode für eindimensionale Arrays von Zeichenfolgen, aber wie man zweidimensionale Array drucken? Mit 1D mache ich es so:Drucken zweidimensionalen Array von Zeichenfolgen als String

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

So drucken Sie 2D-Array.

+0

Wenn Sie in einem Singlethread-Umgebung sind, die 'StringBuilder' Klasse sollte in der Regel bevorzugt wollen verwendet werden zu "StringBuffer", da es alle die gleichen Operationen unterstützt, aber es ist schneller, da es keine Synchronisation durchführt. – Desintegr

Antwort

5

Sie iterieren nur zweimal über die Elemente:

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(']'); 
} 

WICHTIG:StringBuffer sind auch nützlich, weil Sie Chain-Operationen, zB: buffer.append(..).append(..).append(..) da es zurückgibt ein Verweis auf sich selbst! Verwenden Sie synctactic Zucker, wenn verfügbar ..

IMPORTANT2: da in diesem Fall, dass Sie planen, viele Dinge anhängen an die StringBuffer ist es gut, eine Kapazität abzuschätzen, zu vermeiden, Aufteilung und Verlagerung der Array viele Male während Appends, können Sie es tun Berechnen der Größe des multidimensionalen Arrays multipliziert mit der durchschnittlichen Zeichenlänge des Elements, das Sie anhängen möchten.

+1

Methodenverkettung hat nichts mit syntaktischem Zucker zu tun; Es ist eine API-Funktion, keine Sprachfunktion. Andernfalls +1. – polygenelubricants

+3

könnten Sie StringBuilder verwenden, der nicht synchronisiert ist und unter bestimmten Umständen schneller sein könnte – Karussell

+0

Ja, ich wusste davon. Synctactic Zucker sollte die Syntax (Grammatik) der Sprache, während dies nur eine Methode der Klasse ist .. aber kein anderer Begriff kam mir in den Sinn, sehe es als eine poetische Lizenz :) – Jack

0

Zwei for Schleifen:

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

Dies ist problematisch, wenn das Array mehrere Referenzen enthält das sind '=='. Zum Beispiel würde es nicht mit 'new String [] [] {{" 1 "," 1 "}, {" 1 "," 1 "}} funktionieren, da es sich um ein Praktikum handelt. Schlechte Technik, meiner Meinung nach. – polygenelubricants

+0

Wahr, während in den meisten Fällen funktioniert. Jetzt reparieren. – Pindatjuh

53

Die Arrays-Klasse definiert ein paar nützliche Methoden

  • Arrays. toString - funktioniert nicht für verschachtelte Arrays
  • Arrays. deepToString - was tut genau das, was Sie

 

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

Gibt

[[hello, world], [Goodbye, planet]] 
Verwandte Themen