Java格式具有动态宽度和精度的字符串

时间:2016-03-01 19:50:37

标签: java string formatting

如何在格式化字符串时设置动态宽度和精度?我知道以下代码运行良好,但我们怎样才能以格式化方式进行呢?

int len = 3;
String s = "Andy";
System.out.printf("%1$" + len + "." + len + "s%n", s);

Output:
And

我试过这个。它没有抛出错误,但打印的值不同于预期。 (它看起来很混乱,但我已经尝试将“' len”传递给宽度和精度。那就是它。:))

System.out.printf("%2$%1$d.%1$ds%n", len, s);

Output:
%1$d.3s

可行吗?如果是这样,我们如何获得与前者相同的输出?

1 个答案:

答案 0 :(得分:1)

不幸的是,String.format中使用的格式化程序从左到右读取字符串,因此它不会注意到生成的新标志。如果它会从右到左阅读,那么这是可能的,但问题可能在于varags,因为你可以将许多参数传递给方法。

这是格式化

之类的唯一方法
String.format("|%ds", 5, "foo")

输出

  

| FOO

将格式化两次,这不是最有效但最可读的(甚至不是真的......)

所以我的解决方案看起来像这样

 String.format(String.format("|%%%ds", 5), "foo") //Here, I add a double %

第一个格式化程序将返回%5s,它将再次使用String格式化。