我正在尝试打印一个表,其中每列是不同的arraylist,其中每个元素都沿着一条线下去。所以像这样:
Name: Age: Gender:
Bob 18 Male
Mary 25 Female
等等...... 我如何使用printf()语句对其进行格式化?
答案 0 :(得分:1)
首先看一下Formatted Strings。 String.format
和printf
共享相同的格式规则
所以,像......
System.out.printf("%15s", "Name:");
System.out.printf("%4s", "Age:");
System.out.printf("%17s:%n", "Gender:");
会产生类似......
的东西Name: Age: Gender:
现在,我已经将示例分解为三行,但您可以使用System.out.printf("%-15s%-4s%17s%n", "Name:", "Age:", "Gender:");
之类的单行代码。
这里重要的是%
和s
,%15s
之间的数字,它允许格式化程序用最多15个空格填充剩余空格(对于Name:
这将增加10个空格),这将在下一个例子中变得明显......
接下来我们需要格式化数据,例如......
String name = "Bob";
int age = 18;
String gender = "Male";
System.out.printf("%-15s", name);
System.out.printf("%4d", age);
System.out.printf("%17s%n", gender);
name = "Mary";
age = 25;
gender = "Female";
System.out.printf("%-15s", name);
System.out.printf("%4d", age);
System.out.printf("%17s%n", gender);
注意,每列使用相同的间距!这很重要!
总而言之,这将打印出来......
Name: Age: Gender:
Bob 18 Male
Mary 25 Female
有关格式说明符的详细信息,请参阅Format String Syntax
答案 1 :(得分:0)
System.out.printf("Name: %s\nAge: %d\nGender: %s\n", name, age, gender);
答案 2 :(得分:0)
请不要多次调用printf,而是使用允许您创建动态字符串的StringBuilder,在字符串完成后打印它。
import java.util.*;
public class Main
{
public static void main(String[] args) {
int rows = 2;
StringBuilder stringBuilder = new StringBuilder(rows * columns * 36);
stringBuilder.append(String.format("%-15s%-4s%17s\n", "Name:", "Age:", "Gender:"));
stringBuilder.append('\n');
for (int i = 0; i < rows ; ++i ) {
stringBuilder.append(String.format("%-15s%4d%17s\n", "column value",18,"Male"));
}
System.out.println(stringBuilder.toString());
}
}