如何在java中使用printf()打印出一个表?

时间:2015-12-06 23:12:28

标签: java arraylist printf

我正在尝试打印一个表,其中每列是不同的arraylist,其中每个元素都沿着一条线下去。所以像这样:

Name:    Age:    Gender:
Bob        18      Male
Mary       25      Female

等等...... 我如何使用printf()语句对其进行格式化?

3 个答案:

答案 0 :(得分:1)

首先看一下Formatted StringsString.formatprintf共享相同的格式规则

所以,像......

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());
    }
}