Java将字符串中的文本对齐到最左边/开始和最右边/结束并在中间留出空间
Posted
技术标签:
【中文标题】Java将字符串中的文本对齐到最左边/开始和最右边/结束并在中间留出空间【英文标题】:Java Justify text in string to far left/start and far right/end and leave space in the middle 【发布时间】:2022-01-20 08:49:25 【问题描述】:我在 java 中有一个字符串,我正在打印,并且有标题和金额,例如下面
Rice Ksh 150
Cooking Oil Ksh 200
Skinless White Meat Ksh 450
Honey Ksh 270
Cottage Cheese Ksh 539
我打印时想要达到的效果如下所示
Rice Ksh 150
Cooking Oil Ksh 200
Skinless White Meat Ksh 450
Honey Ksh 270
Cottage Cheese Ksh 539
下面是我尝试过但它不起作用的另一个函数,我可以使用另一个函数来使输出合理,其中项目的标题在最左边/开始并且数量在最右边/结束
for (Receipt receipt : receiptList)
String output = "";
String itemAmount = String.format("%s %s %s", receipt.getItem(),
"Ksh", receipt.getAmount());
for (int i = 0; i < itemAmount.length(); i++)
char c = itemAmount.charAt(i);
if (c==' ')
output += " ";
else
output += "" + c;
// print output here
【问题讨论】:
您可以找到收据的最大长度。并用它来计算其他人的空间。 @MasterYi 你有示例代码吗 这个低效的复制循环有什么意义?之后,output
包含与itemAmount
完全相同的内容。无论如何,当您使用String.format
时,让它发挥作用,例如String output = String.format("%-20s Ksh%5s", receipt.getItem(), receipt.getAmount());
。当您的“此处打印输出”意味着打印到控制台/响应时。 stdout,您可以使用System.out.printf("%-20s Ksh%5s%n", receipt.getItem(), receipt.getAmount());
一次性格式化和打印。
@Holger 我正在使用硬拷贝打印机打印,这就是为什么我希望它们被安排好
我从来没有问过你为什么要格式化输出。我问你为什么添加了一个完全没有任何效果的毫无意义的复制循环。
【参考方案1】:
List<Receipt> receiptList = asList(
new Receipt("Rice Ksh", 150),
new Receipt("Skinless White Meat Ksh", 150),
new Receipt("Cottage Cheese Ksh", 150));
int maxSize = 0;
for (Receipt receipt : receiptList)
if(receipt.getItem().length()>maxSize)
maxSize = receipt.getItem().length();
for (Receipt receipt : receiptList)
int spaces = maxSize+1 - receipt.item.length();
String s = String.format("%1$"+spaces+"s", "");
System.out.println(receipt.item.substring(0,receipt.item.length()-3) + s + " KSH " + receipt.amount );
输出:
Rice KSH 150
Skinless White Meat KSH 150
Cottage Cheese KSH 150
性能日志(n)。
【讨论】:
这个是修剪项目标题,特别是如果它们很长【参考方案2】:我会使用System.out.printf
并指定每列的宽度。
例子:
String[] item = "Rice", "Cooking Oil", "Skinless White Meat", "Honey", "Cottage Cheese";
int[] amount = 150,200,450,270,539;
for(int i=0; i<item.length; i++)
System.out.printf("%-20s%4s%4d\n", item[i],"Ksh", amount[i]);
输出:
Rice Ksh 150
Cooking Oil Ksh 200
Skinless White Meat Ksh 450
Honey Ksh 270
Cottage Cheese Ksh 539
【讨论】:
以上是关于Java将字符串中的文本对齐到最左边/开始和最右边/结束并在中间留出空间的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:如何将 DropdownButton 菜单图标对齐到最右边?
#417(div2) B - Sagheer, the Hausmeister