今天,我了解到我无法正确格式化输出以挽救生命。我一直在努力打印两个字符串和一个这样的整数。
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
必须有一种我看不到的清晰方法。任何帮助,将不胜感激。
答案 0 :(得分:0)
问题在于%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个字符串,因此我建议在bankarray[count].getFirst()
语句之外将bankarray[count].getLast()
和printf
连接起来。
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());