我想创建这样的东西,其中每一行都被"pipe"字符包围。
| First Line |
| 100 200 |
| 1000 2000 |
- 在第一行中,右侧填充为1个空格
- 在第二行中,右侧填充为4个空格
- 第三行是2个空格
我试图通过printf+格式化(而不是显式计算填充数)来实现这一点,但我在格式化语法方面遇到了一些问题。这是我当前的代码:
System.out.printf("| FIRST LINE" + "%50sn", "|");
System.out.printf("| 100 200" + "%50s", "|");
System.out.printf("| 1000 2000" + "%50s", "|");
我试图指出每行的最大字符数是50个字符,这一行的第一个字符是"管道",最后一个字符是另一个"管道")。
问题是,在放置50个空格时,没有考虑到左侧部分已经使用的字符(即"|第一行")。上面的代码类似于:
System.out.format("%s %50sn", "| FIRST LINE", "|");
那么,我如何定义输出格式,以便将两个字符串都考虑到宽度呢?
提前谢谢。
尝试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|
您可以使用StringBuilder。它有设置字符和替换字符串的方法。首先创建一个StringBuilder,并填充仅包含空格和行尾的字符。然后将管道角色放在正确的位置。最后,将中间的空格替换为格式化字符串。不要忘记计算换行符,或者逐行执行上述方法,并使用另一个StringBuilder将行添加在一起。
自动选择等于最长字符串加两个字符的填充(如上面的|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" ));
希望能有所帮助。