it-swarm.com.de

Wie zentriere ich einen gedruckten Anweisungstext?

Also habe ich an meinem Java-Projekt gearbeitet und in einem Teil des Programms drucke ich Text aus. Der Text wird auf der linken Seite angezeigt. Ich wollte jedoch, dass er in der Mitte angezeigt wird. Wie viele mache ich das? Ist das eine neue Frage?

Beispiel:

public static void main(String[] args)
{
System.out.println("Hello");
}
10
user2070292

Sehr schnelle Antwort

Sie können die JavaCurses-Bibliothek verwenden, um auf der Konsole unterhaltsame Dinge zu erledigen. Lesen Sie unten, es ist da drin.

Bevor du dies tust, lass uns deine gesamte Frage in einem bestimmten Kontext beantworten

Es ist eine Neulingfrage :), aber es ist eine gültige Frage. Also ein paar Hinweise für Sie:

Die erste Frage ist, wie breit das Terminal ist. (es wird nach Anzahl der Zeichen gezählt) alte Terminals hatten eine feste Größe von 80 Zeichen und 25 Zeilen;

Beginnen Sie als ersten Schritt mit der Annahme, dass es 80 Zeichen breit ist.

Wie zentrieren Sie eine Zeichenfolge auf einem 80 Zeichen breiten Terminalbildschirm? 

Müssen Sie sich um die Länge der Saite kümmern? Wie positionieren Sie etwas horizontal? Fügen Sie Leerzeichen hinzu? Gibt es eine Formatzeichenfolge, die Sie finden können? 

Wenn Sie ein Programm so geschrieben haben, dass Sie ihm eine beliebige Zeichenfolge geben können, die unter diesen Voraussetzungen korrekt angezeigt wird (das Terminal ist 80 Zeichen breit), können Sie sich jetzt Gedanken darüber machen, was passiert, wenn Sie mit einem Terminal verbunden sind, das mehr oder weniger ist als 80 Zeichen? Oder ob Sie überhaupt mit einem Terminal verbunden sind. Wenn Sie es beispielsweise nicht tun, ist es sinnvoll, Ihren Code zu "veredeln"? wahrscheinlich nicht.

Die Frage ist also, wie Sie diese Informationen erhalten. 

Sie fragen nach der Möglichkeit, die Konsole als intelligentes Teletyp-Terminal (tty) mit zeichenbasierten Steuerfunktionen zu behandeln. Teletyp-Terminals des Alten können eine Menge Spaß machen. 

Einige Geschichten

Teletyp-Terminals waren komplizierte Dinge und stammen aus dem Erbe, dass es viele Hersteller von Terminals gab (IBM, DEC usw.) ... Diese Teletyp-Terminals wurden entwickelt, um eine Vielzahl von Problemen zu lösen, beispielsweise die Möglichkeit, Inhalte von Mainframes und Minicomputern aus der Ferne anzuzeigen . 

Es gab eine Reihe von Terminalstandards vt100, vt200, vt220, ansi, die an verschiedenen Stellen in der Entwicklungsgeschichte des Terminals und hunderte von proprietären auf dem Weg entstanden sind. 

Diese Terminals könnten die Positionierung von Cursors und Fenstern und Farben übernehmen, Text hervorheben, unterstreichen usw., aber nicht jeder kann alles. Dies wurde jedoch mit "Steuerzeichen" durchgeführt. ctrl-l ist an den Terminals ansi und vt ein klarer Bildschirm, bei anderen Seiten kann es jedoch Seitenvorschub sein. 

Wenn Sie ein Programm geschrieben haben, das für ein Programm spezifisch ist, hat es an anderer Stelle keinen Sinn. Die Notwendigkeit, dies einfach zu machen, führte dazu, dass sich ein paar Abstraktionsbibliotheken entwickelten, die die Abscheulichkeit verbergen würden.

Die erste heißt Termcap-Bibliothek (Terminal-Capabilities-Library), circa 1978, die eine generische Methode für den Umgang mit Terminals auf UNIX-Systemen bietet. Es könnte einem laufenden Programm die verfügbaren Funktionen des Terminals mitteilen (z. B. die Möglichkeit, die Textfarbe zu ändern) oder den Cursor an einer Position zu positionieren oder sich selbst zu löschen usw. Das Programm würde dann sein Verhalten entsprechend ändern.

Die zweite Bibliothek wird Flüche genannt, ca. 1985 (??). Sie wurde als Teil des BSD-Systems entwickelt und wurde zum Schreiben von Spielen verwendet. Eine der beliebtesten Versionen dieser Bibliothek sind die GNU-Flüche Bibliothek (zuvor als Ncurses bekannt). 

Ich glaube, auf VMS heißt die Bibliothek SMG $ (Screen Management Library).

Auf mit der Antwort

Wie auch immer, Sie können also eine dieser Bibliotheken in Java verwenden, um festzustellen, ob Sie an einem richtigen Terminal arbeiten. Es gibt eine Bibliothek namens JavaCurses on source forge, die diese Funktion für Java-Programme bereitstellt. Dies ist eine Übung, in der Sie lernen, wie Sie eine neue Bibliothek in Ihren Programmen einsetzen können, und sollte aufregend sein. 

JavaCurses bietet Terminal-Programmierfunktionen für Unix- und Windows-Umgebungen. Es wird eine unterhaltsame Übung für Sie sein, um zu sehen, ob Sie damit spielen können.

fortgeschrittene Übung

Eine andere Übung wäre, dieselbe Bibliothek zu verwenden, um zu sehen, ob Sie ein Programm erstellen können, das auf einem Terminal angezeigt wird und auch ohne die Terminalcodes in eine Textdatei geschrieben wird. 

Wenn du irgendwelche Probleme hast, poste weg, ich helfe dir dabei.

8
Ahmed Masud

Wenn Sie eine bestimmte Zeilenlänge haben, erledigt Apache Commons StringUtils.center die Aufgabe ganz einfach. Sie müssen diese Bibliothek jedoch hinzufügen. Javadoc

2

Sie könnten so etwas tun:

public static void main(String[] args) {
    String h = "Hello";

    System.out.println(String.format("%-20s", h));
}

Dieser Ansatz gibt einen String aus, der um eine bestimmte Anzahl von Leerzeichen versetzt ist. In diesem Fall sind Hello 20 Leerzeichen vorangestellt. Die Leerzeichen stehen vor Hello, da die Ganzzahl zwischen % und s negativ ist, andernfalls würden die Leerzeichen nachlaufen.

Machen Sie einfach die ganze Zahl zwischen % und s so lange, bis Sie das gewünschte Ergebnis erhalten.

1
Jonny Henly

Java-Druckanweisungen auf der Konsole können nicht zentriert werden, da eine maximale Zeilenbreite nicht gegeben ist.

Wenn Ihre Konsole beispielsweise auf 80 Zeichen beschränkt ist, können Sie einen speziellen Logger schreiben, der die Zeichenfolge mit Leerzeichen auffüllt. 

Wenn Ihre Zeichenfolge größer als 80 Zeichen war, müssten Sie die Zeichenfolge abschneiden und den Rest in der nächsten Zeile drucken. Auch wenn jemand anderes Ihre App mit einer Konsole mit einer anderen Breite (vor allem kleiner) verwendet, wenn dies komisch aussehen würde.

Im Grunde nein, es gibt keine einfache Möglichkeit, die Ausgabe zu zentrieren ...

1
KidTempo

Wenn Sie die Größe kennen und keine externe Bibliothek verwenden möchten, können Sie Folgendes tun:

static void printer(String str, int size) {
    int left = (size - str.length()) / 2;
    int right = size - left - str.length();
    String repeatedChar = "-";
    StringBuffer buff = new StringBuffer();
    for (int i = 0; i < left; i++) {
        buff.append(repeatedChar);
    }
    buff.append(str);
    for (int i = 0; i < right; i++) {
        buff.append(repeatedChar);
    }
    // to see the end (and debug) if using spaces as repeatedChar
    //buff.append("$");  
    System.out.println(buff.toString());
}

// testing:

printer("string", 30);

// output:
// ------------string------------

Wenn Sie es mit einer ungeraden Nummer für die Variable sizeaufrufen, würde es mit einem - weiter rechts stehen. Und Sie können repeatedCharin ein Leerzeichen ändern.

Bearbeiten

Wenn Sie nur einen chardrucken möchten und die Größe kennen, können Sie dies mit dem Standardcode System.out.printf tun:

int size = 10;
int left = size/2;
int right = size - left;
String format = "%" + left + "c%-" + right + "c";
// would produce: "%5c%-5c"
System.out.printf(format,' ', '#');
// output: "     #    " (without the quotes)

Der %-5c richtet das #-Zeichen links von den ihm zugewiesenen 5 Stellen aus

1
marcelocra

Wie viele Fragen zum Programmieren, erfinden Sie das Rad nicht neu!

Apache hat eine Nice-Bibliothek: "org.Apache.commons", die mit einer StringUtils-Klasse geliefert wird:

https://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/StringUtils.html

Die Pad-Methode ist das, was Sie wollen:

int w = 20;

System.out.println(StringUtils.rightPad("+", w - 1, "-") + "+");
System.out.println(StringUtils.center(StringUtils.center("output", w - 2), w, "|"));
System.out.println(StringUtils.rightPad("+", w - 1, "-") + "+");

werde dir geben:

+----------------------+
|        output        |
+----------------------+
0
Thomas Decaux

Du kannst nicht Sie schreiben an die Konsole, die keine Breite hat, so dass die Mitte nicht definiert ist.

0
Julien Bodin