webentwicklung-frage-antwort-db.com.de

Ausrichten der Druckausgabe in Java

Ich muss eine Liste der Artikel mit ihren Preisen aus einem Array anzeigen und möchte die Preise angleichen. Ich habe es fast zum Laufen gebracht, muss aber verbessert werden. Unten ist der Code und die Ausgabe. Irgendwelche Ideen, wie man alle Preise angleicht? Bisher arbeiten einige, aber einige nicht. Danke im Voraus.

//for loop
System.out.printf("%d. %s \t\t $%.2f\n",
                i + 1, BOOK_TYPE[i], COST[i]);

ausgabe:

1. Newspaper         $1.00
2. Paper Back        $7.50
3. Hardcover book        $10.00
4. Electronic book       $2.00
5. Magazine          $3.00
16
user1781482

Sie können das folgende Beispiel ausprobieren. Verwenden Sie '-' vor der Breite, um die linke Einrückung sicherzustellen. Standardmäßig werden sie richtig eingerückt. was möglicherweise nicht zu Ihrem Zweck passt.

System.out.printf("%2d. %-20s $%.2f%n",  i + 1, BOOK_TYPE[i], COST[i]);

Format String Syntax: http://docs.Oracle.com/javase/7/docs/api/Java/util/Formatter.html#syntax

Formatierung der numerischen Druckausgabe: https://docs.Oracle.com/javase/tutorial/Java/data/numberformat.html

PS: Dies könnte als Kommentar zu DwBs Antwort erscheinen, aber ich habe immer noch keine Berechtigung zum Kommentieren und Beantworten.

21
LionsDen

Formatspezifikationen für printf und printf-ähnliche Methoden verwenden einen optionalen width-Parameter.

System.out.printf( "%10d. %25s $%25.2f\n",
                   i + 1, BOOK_TYPE[i], COST[i] );

Stellen Sie die Breiten auf die gewünschten Werte ein.

5
DwB

Eine einfache Lösung, die mir in den Sinn kommt, besteht darin, einen String Block von Leerzeichen zu haben:

String indent = "                  "; // 20 spaces.

Berechnen Sie beim Ausdrucken einer Zeichenfolge den tatsächlichen Einzug und fügen Sie ihn am Ende hinzu:

String output = "Newspaper";
output += indent.substring(0, indent.length - output.length);

Dadurch wird die Anzahl der Leerzeichen auf die Zeichenfolge übertragen und alle in dieselbe Spalte gestellt.

3
christopher

Hier ist eine mögliche Lösung, mit der die Breite der bookType-Spalte (d. H. Das Format des bookTypes-Werts) basierend auf dem längsten bookTypes-Wert festgelegt wird.

public class Test {
    public static void main(String[] args) {
        String[] bookTypes = { "Newspaper", "Paper Back", "Hardcover book", "Electronic book", "Magazine" };
        double[] costs = { 1.0, 7.5, 10.0, 2.0, 3.0 };

        // Find length of longest bookTypes value.
        int maxLengthItem = 0;
        boolean firstValue = true;
        for (String bookType : bookTypes) {
            maxLengthItem = (firstValue) ? bookType.length() : Math.max(maxLengthItem, bookType.length());
            firstValue = false;
        }

        // Display rows of data
        for (int i = 0; i < bookTypes.length; i++) {
            // Use %6.2 instead of %.2 so that decimals line up, assuming max
            // book cost of $999.99. Change 6 to a different number if max cost
            // is different
            String format = "%d. %-" + Integer.toString(maxLengthItem) + "s \t\t $%9.2f\n";
            System.out.printf(format, i + 1, bookTypes[i], costs[i]);
        }
    }
}
1
Rick Upton

In diesem Blog können Sie formatierten farbigen Text auf der Konsole drucken

https://javaforqa.wordpress.com/Java-print-coloured-table-on-console/

public class ColourConsoleDemo {
/**
*
* @param args
*
* "\033[0m BLACK" will colour the whole line
*
* "\033[37m WHITE\033[0m" will colour only WHITE.
* For colour while Opening --> "\033[37m" and closing --> "\033[0m"
*
*
*/
public static void main(String[] args) {
// TODO code application logic here
System.out.println("\033[0m BLACK");
System.out.println("\033[31m RED");
System.out.println("\033[32m GREEN");
System.out.println("\033[33m YELLOW");
System.out.println("\033[34m BLUE");
System.out.println("\033[35m Magenta");
System.out.println("\033[36m CYAN");
System.out.println("\033[37m WHITE\033[0m");

//printing the results
String leftAlignFormat = "| %-20s | %-7d | %-7d | %-7d |%n";

System.out.format("|---------Test Cases with Steps Summary -------------|%n");
System.out.format("+----------------------+---------+---------+---------+%n");
System.out.format("| Test Cases           |Passed   |Failed   |Skipped  |%n");
System.out.format("+----------------------+---------+---------+---------+%n");

String formattedMessage = "TEST_01".trim();

leftAlignFormat = "| %-20s | %-7d | %-7d | %-7d |%n";
System.out.print("\033[31m"); // Open print red
System.out.printf(leftAlignFormat, formattedMessage, 2, 1, 0);
System.out.print("\033[0m"); // Close print red
System.out.format("+----------------------+---------+---------+---------+%n");
}
0
hemanto