我不确定如何用文字解释。我想在跑完后在我的cmd中实现这个目的。
Event Average Stdev Weight
Logins 4.50 1.25 2
Total time online 287.15 42.12 1
Emails sent 65.40 30.71 1
Orders processed 150.73 20.13 1
Pizza's ordered online 2.03 1.06 0.5
但现在我的结果是这样的
Event Average Stdev Weight
Logins 3.33 1.25 2.0
Time Online 335.33 33.52 1.0
Emails Sent 66.00 15.51 1.0
Orders processed 150.67 17.25 1.0
Pizza's Ordered 2.33 1.25 0.5
事件名称可以是长或短,取决于用户输入。无论事件名称长度如何,都可以很好地格式化。我的价值都是正确的,只是格式化。以下是我的打印代码。
Formatter formatter = new Formatter();
System.out.println(formatter.format("%s %20s %20s %20s", "Event", "Average", "Stdev", "Weight"));
int count = 0;
for (Map.Entry<String, Double> entry : eventsMap.entrySet()) {
formatter = new Formatter();
String event = entry.getKey();
double weight = entry.getValue();
System.out.println(formatter.format("%s %20s %20s %20s", event, average[count], stdev[count], weight));
count++;
}
答案 0 :(得分:0)
主要问题是你没有指定event
字符串的最小长度,因此后续的内容位置取决于它。
但为了避免将来出现问题,我建议您使用固定长度,因此如果您的字符串长度大于最小长度,则字符串会自动截断,但对齐方式仍然正确。
要指定固定长度,您应该将最小和最大长度都设置为相同的值;您也可以将字符串与-
对齐。
例如%-20.20s
:
-
是左对齐字符串,否则它将是右对齐
20
表示最小长度
.20
表示最大长度,我们将其等于具有固定长度的最小长度
在您的示例中,您需要确定要显示的所有元素的所需固定长度(也是event
字符串),然后应该相应地对齐所有内容。
如果您想确保event
字符串没有被截断,您可以在Map
中找到它的最大长度,然后使用该值为格式化程序创建最小或固定长度:
int eventMaxLength = ... // assign the max length
String eventFormat = "%-" + eventMaxLength + "." + eventMaxLength + "s";
System.out.println(formatter.format(eventFormat + " %-20.20s %-20.20s ...