如何使用printf()和变量宽度居中字符串输出?

4
我将使用Java中的printf()创建表头输出。其中一个列需要具有可变宽度。
基本上它应该看起来像这样:
//two coords
Trial    Column Heading
1        (20,30)(30,20)
//three coords
Trial        Column Heading
1        (20,40)(50,10)(90,30)

我尝试使用:

int spacing = numCoords * 7; //size of column
printf("Trial    %*^s", column, "Column Heading");

当我尝试在转换语句中使用*^时,我一直收到输出错误。

有人知道正确的格式化字符串应该是什么吗?

2个回答

6

使用Commons Lang库中的StringUtils.center:

StringUtils.center(column, "Column Heading".length());

3

Java不支持“*”格式说明符。相反,直接将宽度插入到格式字符串中:

int spacing = numCoords * 7; //size of column
System.out.printf("Trial    %" + spacing + "s", "Column Heading");

好的,这很有道理,除了输出不是居中的,它应该是右对齐的,对吗?(由于有更多的列,因此它需要居中或两侧间距相等) - Khan
确实。我认为 ((间距 +“列标题”)/ 2) 可以做到这一点。顺便说一下,如果你找到一个你喜欢的答案(无论是这个还是别人的),你应该接受它来授予积分。 - Brett Kail
谢谢。作为一个几十年前的C程序员,我一直在尝试让*起作用——有些博客说它应该能工作。这是一个几乎太明显的解决方法,但不知何故我想不到。=) - Marvo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接