Выровнять вывод printf в Java
мне нужно, чтобы отобразить список элементов с их ценами из массива, и хотел бы, чтобы выровнять цены. Он почти работает, но нуждается в усовершенствованиях. Ниже приведен код и вывод. Есть идеи, как выровнять цены? Пока что некоторые работают, но некоторые нет. Заранее спасибо.
//for loop
System.out.printf("%d. %s tt $%.2fn",
i + 1, BOOK_TYPE[i], COST[i]);
выход:
1. Newspaper .00
2. Paper Back .50
3. Hardcover book .00
4. Electronic book .00
5. Magazine .00
5 ответов
вы можете попробовать приведенный ниже пример. Используйте ' - ' перед шириной, чтобы обеспечить левый отступ. По умолчанию они будут иметь правильный отступ; что может не соответствовать вашей цели.
System.out.printf("%2d. %-20s $%.2f%n", i + 1, BOOK_TYPE[i], COST[i]);
Синтаксис Строки Формата:http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax
Форматирование Вывода Числовой Печати:https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
PS: Это может пойти в качестве комментария к DwB ответ, но у меня все еще нет разрешений на комментарий и поэтому отвечаю на него.
технические характеристики printf и printf-подобные методы принимают необязательный параметр ширина.
System.out.printf( "%10d. %25s $%25.2f\n",
i + 1, BOOK_TYPE[i], COST[i] );
отрегулируйте ширину до желаемых значений.
простое решение, которое приходит на ум-это String
блок помещений:
String indent = " "; // 20 spaces.
при распечатке строки вычислите фактический отступ и добавьте его в конец:
String output = "Newspaper";
output += indent.substring(0, indent.length - output.length);
Это опосредует количество пробелов в строке и помещает их все в один столбец.
вот потенциальное решение, которое установит ширину столбца bookType (т. е. формат значения bookTypes) на основе самого длинного значения bookTypes.
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 9.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]);
}
}
}
вы можете обратиться к этому блогу для печати форматированного цветного текста на консоли
https://javaforqa.wordpress.com/java-print-coloured-table-on-console/
public class ColourConsoleDemo {
/**
*
* @param args
*
* "3[0m BLACK" will colour the whole line
*
* "3[37m WHITE3[0m" will colour only WHITE.
* For colour while Opening --> "3[37m" and closing --> "3[0m"
*
*
*/
public static void main(String[] args) {
// TODO code application logic here
System.out.println("3[0m BLACK");
System.out.println("3[31m RED");
System.out.println("3[32m GREEN");
System.out.println("3[33m YELLOW");
System.out.println("3[34m BLUE");
System.out.println("3[35m MAGENTA");
System.out.println("3[36m CYAN");
System.out.println("3[37m WHITE3[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("3[31m"); // Open print red
System.out.printf(leftAlignFormat, formattedMessage, 2, 1, 0);
System.out.print("3[0m"); // Close print red
System.out.format("+----------------------+---------+---------+---------+%n");
}