【问题标题】:Java format String with dynamic width and precision具有动态宽度和精度的 Java 格式字符串
【发布时间】:2016-03-01 19:50:37
【问题描述】:

格式化字符串时如何设置动态宽度和精度?我知道下面的代码效果很好,但是我们如何以格式化程序的方式来做呢?

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

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

【问题讨论】:

  • 如果有比你的第一个更好的答案,我会感到有点惊讶。
  • @Louis,我理解,但我们通常使用格式化程序来避免字符串连接,而且这看起来更像是再次使用连接。所以放在这里看看有没有更好的办法。
  • 我明白了。我通过说“我很确定没有”来回答你的问题。

标签: java string formatting


【解决方案1】:

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

所以唯一的方法来格式化类似的东西

String.format("|%ds", 5, "foo")

输出

|呵呵

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

所以我的解决方案是这样的

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

第一个格式化程序将返回%5s,它将再次使用字符串进行格式化。

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2014-07-21
    • 2015-01-16
    相关资源
    最近更新 更多