Java的String.format方法中的可变宽度

14

我正在开发一个项目,需要展示文本树。我尝试使用Java的String.format方法来简化格式化过程,但是当我尝试应用不同的宽度时遇到了麻烦。

目前我有一个叫做depth的变量(一个整数)。

我尝试执行以下操作:

String.format("%"+depth+"s"," ") + getOriginalText() + "\n";

然而我收到了以下错误。

java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
任何关于如何做到这一点的建议,还是我应该只使用循环语句?谢谢你的帮助!

你是真的在问这个问题吗?https://dev59.com/53RC5IYBdhLWcg3wK9yV - billjamesdev
你能发一下完整的代码吗?我想要理解你在做什么。 - ElderMael
我也曾经想过这个问题,因为我知道C/C++有一个*修饰符:宽度没有在格式字符串中指定,而是作为一个额外的整数值参数出现在需要格式化的参数之前。,即我正在寻找类似于String.format("%*i", pad_width, number)的东西。但是给出的答案也很有道理。 - mxmlnkn
2个回答

12

这个有效:

int depth = 5;
String str= "Hello"+ String.format("%"+depth+"s"," ") + "world" + "\n";
System.out.println(str);

它在中间打印了 5 个空格。

你     好,世     界。

请检查您的代码,确保将 depth 分配为有效的 int 值。最可能的问题是(depth 中的无效值)。


那很有道理。我想我思维短路了。我忘记了第一次调用时深度传递了零,而“%0s”是一个错误。 - Phillip Huff
@PhillipHuff:很好知道。如果您觉得这有帮助,请不要忘记接受答案。 - Yogendra Singh

1
您可以尝试使用 "System.out.printf" 命令来实现以下操作:
int depth = 10;

System.out.printf("%s" + "%" +depth + "s", "Hello","World" );

你好世界。

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