今天我了解到我不能正确地格式化输出来挽救我的生命。我一直在努力打印两个字符串和一个像这样的整数。
Account holder Social security number
Steve jensen XXXXXXXXX
Mary Chapman XXXXXXXXX
Steve Zappa XXXXXXXXX
Frank Vai XXXXXXXXX
Yuzo Shimomura XXXXXXXXX
这有可能吗?我得到了更好的结果,左对齐姓氏,右对齐数字,如下所示
ps.printf("%s %-12s",bankarray[count].getFirst(),bankarray[count].getLast());
ps.printf("%17d",bankarray[count].getSoNumber());
但这只能让我走到这一步。
Account holder Social security number
Steve jensen XXXXXXXXX
Mary Chapman XXXXXXXXX
Steve Zappa XXXXXXXXX
Frank Vai XXXXXXXXX
Yuzo Shimomura XXXXXXXXX
必须有一种清晰的方式,我只是看不到。任何帮助都将不胜感激。
发布于 2018-09-26 04:56:44
问题所在
问题是%s %-12s
中的填充只填充最后一个属性(bankarray[count].getLast()
)。如果您测试执行以下代码,即使字符串的长度不同,它也会给出正确对齐的文本。
代码
System.out.printf("%s %-12s", "Firstname", "Last");
System.out.printf("%17d%n", 123456789);
System.out.printf("%s %-12s", "Firstname", "Lastname");
System.out.printf("%17d%n", 123456789);
输出
Firstname Last 123456789
Firstname Lastname 123456789
然而,下面的代码会把它搞得一团糟,因为第一个属性没有填充。
代码
System.out.printf("%s %-12s", "First", "Lastname");
System.out.printf("%17d%n", 123456789);
System.out.printf("%s %-12s", "Firstname", "Lastname");
System.out.printf("%17d%n", 123456789);
输出
First Lastname 123456789
Firstname Lastname 123456789
解决方案
我不能完全确定是否可以用printf
同时填充2个字符串,所以我建议在printf
语句之外连接bankarray[count].getFirst()
和bankarray[count].getLast()
。
String name = String.format("%s %s", bankarray[count].getFirst(), bankarray[count].getLast());
ps.printf("%s-12s", name);
ps.printf("%17d", bankarray[count].getSoNumber());
额外:填充卡号
如果您要填充姓名,则不需要填充卡号,因为它只会将卡号从前一个卡号结束的位置推开。这应该是足够的(同样的事情):
String name = String.format("%s %s", bankarray[count].getFirst(), bankarray[count].getLast());
// Added 12+17=29 as padding
ps.printf("%s-29s", name);
// Removed padding enteirely
ps.printf("%d", bankarray[count].getSoNumber());
https://stackoverflow.com/questions/52506158
复制相似问题