4

我想创建这样的东西,每行都被“管道”字符包围。

| 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 个空格时没有考虑左侧部分已经使用的字符(即“| FIRST LINE”)。上面的代码类似于:

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

那么,如何定义输出格式以便将两个字符串都考虑到宽度?

提前致谢。

4

3 回答 3

6

试试Formatter

例如

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

输出:

| 第一行 |
| 200 100 |
| 1000 2000 |
于 2012-01-09T22:40:47.160 回答
0

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

于 2012-01-09T22:35:16.980 回答
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" ));

希望有帮助。

于 2012-01-09T22:43:30.743 回答