【问题标题】:Column spacing issue in printing the formatted output打印格式化输出时的列间距问题
【发布时间】:2017-07-20 07:30:29
【问题描述】:

所以这是我需要格式化的代码的 sn-p:

double textbookprice = 0, tradebookprice = 0;
for(int i=0;i<tempTextbooks.size();i++) {
    System.out.println(tempTextbooks.get(i).dataMember +"\t "+tempTextbooks.get(i).title +"\t "+tempTextbooks.get(i).author+"\t $"+df.format(tempTextbooks.get(i).getPrice()));
    textbookprice = textbookprice + tempTextbooks.get(i).getPrice();
}

这是我得到的输出,

COS221   Introduction to Programming with C++    Y. Daniel Liang     $120.99
COS225   Java Foundations    John Lewis  $94.59
BUS398   Excel 2010 Power Programming with VBA   John Walkenbach     $87.99

我需要班级编号/标题/作者/价格都有自己的专栏

【问题讨论】:

  • 你的意思是有他们自己的列他们都照原样做?您的意思是所有列都对齐吗?
  • 是的,我需要对齐每一列。所以他们会去|Class#|Title|Author|Price
  • 好吧,您需要计算每列的最大长度,然后用空格填充列中的每个其他值以达到该长度。
  • 这是一个很好的答案。您应该编辑您的标题并添加诸如“打印”和“对齐”之类的词,以便人们以后可以找到它。

标签: java console spacing


【解决方案1】:

您可以使用System.out.format 来定义字段的长度。像这样的

System.out.format("%-10s %-40s %-20s %-15s \n", tempTextbooks.get(i).dataMember, tempTextbooks.get(i).title, tempTextbooks.get(i).author, df.format(tempTextbooks.get(i).getPrice()));

这将前四列的第 5 列固定为 10、40、20 和 15 个字符。它们前面的- 表示您希望它们左对齐。 (如果你想要右对齐的表格,你可以删除-。)

您可以根据需要更改它们。

编辑

我已尝试使用此代码重现此问题

public class HelloWorld {
    public static void main(String[] args) {
        String[] s1 = {"COS221", "COS225", "BUS398"};
        String[] s2 = {"Introduction to Programming with C++", "Java Foundations", "Excel 2010 Power Programming with VBA"};
        String[] s3 = {"Y. Daniel Liang", "John Lewis", "John Walkenbach"};
        String[] s4 = {"$120.99", "$94.59", "$87.99"};

        for (int i = 0; i < 3; i++) {
            System.out.format("%-10s %-40s %-20s %-15s \n", s1[i], s2[i], s3[i], s4[i]);
        }
    }
}

输出如下:

COS221     Introduction to Programming with C++     Y. Daniel Liang      $120.99         
COS225     Java Foundations                         John Lewis           $94.59          
BUS398     Excel 2010 Power Programming with VBA    John Walkenbach      $87.99          

【讨论】:

  • 我现在如何在价格前面加上“$”,我已将其修复,使其现在对齐。但是 $ 价格不再存在
  • 我使用的新代码行是 System.out.format("%-10s %-40s %-20s %-15s \n", tempTextbooks.get(i).dataMember, tempTextbooks. get(i).title, tempTextbooks.get(i).author, df.format(tempTextbooks.get(i).getPrice()));
  • 我不认为这个新代码应该篡改$。你检查过任何错误吗?仅供参考,您也可以将美元放在最后一个参数之前$%-15 就像这样System.out.format("%-10s %-40s %-20s $%-15s \n", tempTextbooks.get(i).dataMember, tempTextbooks.get(i).title, tempTextbooks.get(i).author, df.format(tempTextbooks.get(i).getPrice()));
  • 感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多