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

标签 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

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

最佳答案

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

所以唯一的方法就是格式化类似

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

输出

| foo

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

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

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

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

关于具有动态宽度和精度的 Java 格式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35732140/

相关文章:

java - Eclipse 被导入混淆了 ("accessible from more than one module")

c# - 使用 string.format 和 List<T>.Count() 进行动态字符串格式化

java - 如何使用jidea按字母顺序格式化变量字符串?

java - 如何创建与引号外的特定文本匹配的正则表达式

string - GHC 接受的 unicode 字符范围

c++ - getline(cin, String) 在没有另一个输入的情况下接收输入

android - 带有数字 EditText 字段的警报对话框

java - 如何让接口(interface)注解被实现继承?

java - Android - 每 15 分钟运行一次后台任务,即使应用程序没有运行

Java transient 运行时改进?