2017-06-05 7 views
1

zu haben Ich versuche also, Funktion zu erstellen, die eine Zeichenfolge zurückgibt. Der String beginnt mit dem eingegebenen Wort, dann mit einer bestimmten Anzahl von Leerzeichen und dann mit einer Zahl. Die Anzahl der Leerzeichen hängt von der Länge des Wortes ab. Die Idee ist, dass alle Wörter und Zahlen übereinstimmen sollten, wenn die Methode mehrmals aufgerufen wird. Ich habe ein Bild davon, wie ich die Zeichenfolge formatieren möchte.Formatieren einer Zeichenfolge, um eine Zeichenfolge mit den Wörtern/Zahlen in Zeile

Format Example

Dies ist die Funktion, die ich im Moment haben. Wenn ich mehr zufälligen Worte und Zahlen in die Funktion eingeben und println Anweisung jedes Mal verwenden, funktioniert die Funktion richtig und druckt, wie ich es formatiert werden möchte (oder, wie im obigen Beispiel gezeigt)

public String formatList(String x, int y){ 
    String z = x; 
    int stringLength=x.length(); 
    int i=0; 
    while(i<(30-stringLength)){ 
    z+=" "; 
    i++; 
    } 
    z+=String.valueOf(y); 
    return z; 
} 

jedoch Wenn ich eine for-Schleife habe, gebe eine Liste von Wörtern und Zahlen ein und füge sie zu einem JTextArea mit dem Titel wordList hinzu, bekomme ich Folgendes (beachte, dass das Wort Distribution ein von mir definiertes Objekt ist, das im Wesentlichen eine ArrayList von Map-Einträgen ist und getDistribution ist a Funktion, die diese Arraylist zurückgibt) :

String x=""; 

for(int i=0; i<wordDistribution.getDistribution().size();i++){ 
     String word = wordDistribution.getDistribution().get(i).getKey(); 
     int count = wordDistribution.getDistribution().get(i).getValue(); 
     x+=formatList(word,count)+"\n"; 
    } 
    wordList.setText(x); 

Resulting format

+0

Warum nicht einfach die Daten in eine Tabelle füllen und die Ausrichtung auf TDs eingestellt? Sie müssen sich keine Gedanken um Leerzeichen machen. Die Tabelle richtet Ihre Inhalte für Sie aus. – Korgrue

Antwort

3

Verwenden Sie String.format(), z.B.

StringBuilder buf = new StringBuilder(); 
buf.append(String.format("%-20s%4d%n", "Foo", 42)); 
buf.append(String.format("%-20s%4d%n", "Hello World", 11)); 
buf.append(String.format("%-20s%4d%n", "This is Great", 999)); 
System.out.print(buf); 

Ausgabe

Foo     42 
Hello World   11 
This is Great  999 
+0

Fein: StringBuilder ist effizienter (schneller) als String +. –

Verwandte Themen