2017-12-22 3 views
1

Was ich meine, ist, dass ich eine einfache 2x2-Matrix habe, die ich in eine JTextArea ausdrucken möchte, jedoch verwendet diese Matrix Zahlen, die unterschiedliche Integer-Längen verwenden, und ich weiß nicht, welche Längen vor dem Programm sein werden Ausführen. Das heißt, wenn ich versuche, die Ausgabefolge sauber zu formatieren, wird es manchmal unordentlich.Gibt es eine einfache Möglichkeit, eine String-Ausgabe, die unterschiedliche Integer-Längen verwendet, ordentlich zu formatieren?

Zum Beispiel habe ich eine Matrix wie unten:

 | ham | spam | 
ham | x | y | 
spam | z | a | 

jedoch abhängig von der Länge der ganzen Zahlen das Format ändern. Sprich, wenn x gleich 23 ist, die ganze Reihe entlang schiebt einen Raum sein würde, so dass es unordentlich aussehen wird, etwa so:

 | ham | spam | 
ham | 23 | y | 
spam | z | a | 

ich mich nur gefragt wurde, ob es eine Möglichkeit, dies zu vermeiden war, mit der Ausnahme, eine Menge von if-Anweisungen und Versuch/Irrtum, um die String-Größen richtig zu machen. Ich erkenne, dass es nur eine ästhetische Sache ist. Es ist nicht entscheidend für den Betrieb meines Programms. Ich mag einfach Dinge, die gut aussehen.

+0

Warum nicht 'mystring.length()' verwenden, um seine Größe zu kennen und eine Anzahl von 'Leerzeichen' Zeichen abhängig von der String-Größe anzuzeigen? (Je größer die String-Größe, desto kleiner die Anzahl der Leerzeichen in jeder Zelle). Oder Sie können Ihre Zellengröße auf das Maximum der Länge aller Zeichenfolgen einstellen, +2 (ein Leerzeichen davor, ein Leerzeichen danach), durch Auffüllen mit der rechten Maustaste. – Vulpo

+0

Ich endete mit string.length() und eine Menge von if-Anweisungen, aber es funktioniert jetzt. So danke! –

Antwort

1

Sie String.format() oder seinen Druck-äquivalent können System.out.printf()

System.out.printf("%-10s | %5s | %s \n", "ham", 23, "y"); 
System.out.printf("%-10s | %5s | %s \n", "spam", "z", "y"); 
System.out.printf("%-10s | %5s | %s \n", "stamp", 1984, "y"); 

drucken

ham  | 23 | y 
spam  |  z | y 
stamp  | 1984 | y 

Die hier Magie von %s getan wird, die „formatieren Sie das Argument als String“, sagt die mit parametrisiert eine Zahl, die die Mindestlänge der Zeichenfolge angibt. Wenn der angegebene String kürzer als diese Nummer ist, wird er mit Leerzeichen aufgefüllt. Das erste% s ist auch mit einem - was bedeutet, „machen die Zeichenkette linksbündig“

Sie mehr über Formatter Syntax lernen können, auf das Sie javadoc page

parametrisiert die richtige Nummer für Ihr Format-String zu finden, müsste vor dem Druck alle Zeilen durchgehen, um die maximale Länge zu ermitteln.

+0

Dies ist eine viel prägnantere Lösung für das, was ich gerade geschrieben habe. Ich könnte einfach zurückgehen und stattdessen alles mit printf ersetzen. Danke dafür! –

+0

Noch eine kurze Frage, weißt du, ob JTextArea.append() bestimmte Leerzeichen entfernt? Ich habe eine Ausgabe in meiner Konsole und es sieht gut aus und dann die JTextArea, die den gleichen String druckt, macht die Ausgabe seltsam aussehen, wie in diesem Sinne: https://gist.github.com/anonymous/f973ebf00b4fb182589f40f597c6cf2d Edit: Oder eigentlich könnte es mit der JTextArea nicht regelmäßigen Abstand für seine Zeichen zu tun haben? –

+0

Ja, das ist wahrscheinlich ein Font-Problem. In "normalen" Schriftarten hat jedes Zeichen seine eigene Breite, so dass Text einfacher zu lesen ist. Z.B. ein "l" ist viel schmaler als ein "m". Beim Codieren werden normalerweise * monospaced * -Schriften verwendet, die für alle Zeichen die gleiche Breite haben. –

Verwandte Themen