首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java -打印格式宽度

java -打印格式宽度
EN

Stack Overflow用户
提问于 2018-09-26 04:25:25
回答 1查看 53关注 0票数 0

今天我了解到我不能正确地格式化输出来挽救我的生命。我一直在努力打印两个字符串和一个像这样的整数。

代码语言:javascript
复制
Account holder   Social security number
Steve jensen                 XXXXXXXXX
Mary Chapman                 XXXXXXXXX
Steve Zappa                  XXXXXXXXX
Frank Vai                    XXXXXXXXX
Yuzo Shimomura               XXXXXXXXX

这有可能吗?我得到了更好的结果,左对齐姓氏,右对齐数字,如下所示

代码语言:javascript
复制
ps.printf("%s %-12s",bankarray[count].getFirst(),bankarray[count].getLast());
ps.printf("%17d",bankarray[count].getSoNumber());

但这只能让我走到这一步。

代码语言:javascript
复制
Account holder   Social security number
Steve jensen         XXXXXXXXX
Mary Chapman        XXXXXXXXX
Steve Zappa          XXXXXXXXX
Frank Vai            XXXXXXXXX
Yuzo Shimomura      XXXXXXXXX

必须有一种清晰的方式,我只是看不到。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-26 04:56:44

问题所在

问题是%s %-12s中的填充只填充最后一个属性(bankarray[count].getLast())。如果您测试执行以下代码,即使字符串的长度不同,它也会给出正确对齐的文本。

代码

代码语言:javascript
复制
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);

输出

代码语言:javascript
复制
Firstname Last                123456789
Firstname Lastname            123456789

然而,下面的代码会把它搞得一团糟,因为第一个属性没有填充。

代码

代码语言:javascript
复制
    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);

输出

代码语言:javascript
复制
First Lastname            123456789
Firstname Lastname            123456789

解决方案

我不能完全确定是否可以用printf同时填充2个字符串,所以我建议在printf语句之外连接bankarray[count].getFirst()bankarray[count].getLast()

代码语言:javascript
复制
String name = String.format("%s %s", bankarray[count].getFirst(), bankarray[count].getLast());

ps.printf("%s-12s", name);
ps.printf("%17d", bankarray[count].getSoNumber());

额外:填充卡号

如果您要填充姓名,则不需要填充卡号,因为它只会将卡号从前一个卡号结束的位置推开。这应该是足够的(同样的事情):

代码语言:javascript
复制
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());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52506158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档