格式化输出以具有相同的列数

时间:2012-01-09 22:29:01

标签: java printf output-formatting

我想创建这样的东西,其中每一行都被“pipe”字符包围。

| First Line |
| 100 200    |
| 1000 2000  |
  • 在第一行中,右侧填充为1个空格。
  • 在第二行中,右边填充为4个空格。
  • 第三行是2个空格。

我正在尝试通过printf +格式化(而不是显式计算填充数),但我在格式化语法方面遇到了一些麻烦。这是我目前的代码:

System.out.printf("| FIRST LINE" + "%50s\n", "|");
System.out.printf("| 100 200" + "%50s", "|");
System.out.printf("| 1000 2000" + "%50s", "|");

我试图指出每行的最大值是50个字符,是行中第一个字符“管道”,而行中的最后一个字符是另一个“管道”。

问题在于,在不考虑左侧部分已经使用的字符(即“|第一行”)的情况下放置了50个空格。上面的代码类似于:

System.out.format("%s %50s\n", "| FIRST LINE", "|");

那么,我如何定义输出格式,以便考虑宽度?

考虑两个字符串

提前致谢。

3 个答案:

答案 0 :(得分:6)

尝试Formatter

e.g。

StringBuffer sb = new StringBuffer();
Formatter f = new Formatter(sb, Locale.getDefault());
f.format("| %-50s |%n", "FIRST LINE");
f.format("| %-50s |%n", "200 100");
f.format("| %-50s |%n", "1000 2000");
String finalResult = sb.toString();
System.out.println(finalResult);

输出:

| FIRST LINE                                         |
| 200 100                                            |
| 1000 2000                                          |

答案 1 :(得分:0)

您可以使用StringBuilder。它有设置字符和替换字符串的方法。首先创建一个StringBuilder并填充它只包含空格和行尾的字符。然后将管道字符放在正确的位置。最后,用格式化的字符串替换中间的空格。不要忘记计算换行符,或者对行执行方法行,并使用另一个StringBuilder将这些行添加到一起。

答案 2 :(得分:0)

将自动选择填充等于最长字符串加上两个字符(如| FIRST LINE |上面)的东西是不可能的,但是它会非常整洁。

我能帮到你的最好的是:

    System.out.println(String.format("| %10s |", "FIRST LINE" ));
    System.out.println(String.format("| %10s |", "100 200" ));
    System.out.println(String.format("| %10s |", "1000 2000" ));

希望有所帮助。