Java 格式化 - 部分数据未对齐

Java Formatting - Some data are not aligned

这是我第一次做 java。我们目前正在学习它,但我们还没有真正触及格式,我想知道是否有人可以帮助我处理我的代码。所以我的代码如下:

public void displayAllOrder()
{
    System.out.println("Initial Cost" + "\t" + "Voucher Code Used" + "\t" + "Voucher Amount Deducted" + "\t\t" + "Final Cost" + "\t" + "Shipping ID" + "\t" + "Shipment Status");
    for (int i = 0; i <= currentIndex; i++)
    {
        String strInitialCost = String.format("%.2f", initialCost[i]);
        String strFinalCost = String.format("%.2f", finalCost[i]);
        System.out.println("$"+strInitialCost + "\t\t" + voucherCode[i] + "\t\t\t" + "$"+voucherAmount[i] + "\t\t\t" + "$"+strFinalCost + "\t" + shippingID[i] + "\t\t" + shipmentStatus[i]);
    }

如果输入很大,它会完美对齐,但如果计算出的输入很小,它不会对齐。示例输出如下:

我希望有人能帮助我理解这个问题。谢谢。

对于每个字符具有相同宽度(“m”和“i”)的固定大小的字体, 您可以将 printf 与 %13.2f 之类的东西一起使用,以获得 13 个右对齐的双精度位置。

public void displayAllOrders() {
    System.out.printf("%-15s %-15s %-20s %-15s %-15s %s%n",
        "Initial Cost", "Voucher Code Used", "Voucher Amount Deducted",
        "Final Cost", "Shipping ID", "Shipment Status");
    for (int i = 0; i <= currentIndex; i++) {
        System.out.printf("$-14.2f %-15s %5s$%14.2f $%14.2f %-15s %s%n",
          initialCost[i], voucherCode[i], "", voucherAmount[i],
          finalCost[i], shippingID[i], shipmentStatus[i]);
    }
}

上面的代码可能有误,我不知道需要的宽度:15 列宽,列之间有一个 space。 %n = 行尾。

使用制表符,"\t" 将 Windows 填充到 8 space 秒。这将导致令人不安的布局。

也许您甚至想要不同的输出类型。

关于布局,您可能想将其放入 html table 并使用浏览器观看:

public void displayAllOrder()
{
    System.out.println("<html><table><thead><tr>");
    for(String title : Arrays.asList("Initial Cost", "Voucher Code Used", "Voucher Amount Deducted", "Final Cost", "Shipping ID", "Shipment Status"))
    {
        printCell(title);
    }
    System.out.println("</tr></thead><tbody>");
    for (int i = 0; i <= currentIndex; i++)
    {
        System.out.println("<tr>");
        String strInitialCost = String.format("%.2f", initialCost[i]);
        String strFinalCost = String.format("%.2f", finalCost[i]);
        printCell("$"+strInitialCost);
        printCell(voucherCode[i]);
        printCell("$"+voucherAmount[i]);
        printCell("$"+strFinalCost);
        printCell(shippingID[i]);
        printCell(shipmentStatus[i]);
        System.out.println("</tr>");
    }
    System.out.println("</tbody></table></html>");
}

private void printCell(String content)
{
    System.out.println("<td>" + content + "</td>");
}