【问题标题】:Align & Indent Array Elements - Java对齐和缩进数组元素 - Java
【发布时间】:2020-05-16 13:01:55
【问题描述】:

我想将double 数组元素对齐到相关字符串数组元素的右侧。

示例输出:

TITLE         TICKET TYPE        COST
-------------------------------------
Tulip Garden  Entry             $10.0
              Tour + Ride       $20.0
-------------------------------------
Museum        Entry              $0.0
              Guided Tour        $5.0
-------------------------------------
...

以下是我到目前为止所做的。

EventData.java

private String[] ticketTypeTitle;
private double[] ticketTypeCost;

...

public String[] getTicketTitles() { return this.ticketTypeTitle; }
public double[] getTicketCosts() { return this.ticketTypeCost; }

Main.java

String pattern = "%-28s %-28s %-1s";

System.out.printf(pattern, "TITLE", "TICKET TYPE", "COST");
System.out.println("-----------------------------------------------);

for (int i = 0; i < eventCount; i++ {
    System.out.format(pattern, eventData[i].getTitle(), String.join("\n\t\t\t\t\t\t", eventData[i].getTicketTitles(), "$" + String.join("\n\t\t\t\t\t\t", Arrays.toString(eventData[i].getTicketCosts().replaceAll("\\[|\\]|\\,", "")));
    System.out.println("---------------------------------------------");
}

问题 #1:for 循环的第一行,我无法在每个数组元素之前显示美元符号(仅用于门票费用)。

问题 #2: 我希望成本值也与票证类型一致,类似于我上面的输出示例,但我还没有弄清楚如何做到这一点。 p>

感谢您的帮助!

【问题讨论】:

  • 使用printf() 也可以打印数据行。

标签: java arrays


【解决方案1】:

您需要为数字使用单独的格式化程序,以确保它们的格式正确。我还将 $ 符号直接添加到格式化程序模式中。见下文。

以下是对您有用的示例代码:

String[] titleArray = {"title1", "title2", "title3", "title4", "title5"};
String[] typeArray = {"type1", "type2", "type3", "type4", "type5"};
double[] costArray = { 10.0, 20.0, 0.0, 5.0, 3.33 };

String pattern = "%-28s %-28s $%5.2f";
String patternHeader = "%-28s %-28s %-1s";

System.out.printf(patternHeader, "TITLE", "TICKET TYPE", "COST");
System.out.println();
System.out.println("-----------------------------------------------");

for (int i = 0; i < 5; i++) {
    System.out.format(pattern, titleArray[i], typeArray[i], costArray[i]);
    System.out.println();
}
System.out.println("---------------------------------------------");

【讨论】: