gpt4 book ai didi

java - String.format 运行时格式化

转载 作者:行者123 更新时间:2023-12-02 06:34:22 25 4
gpt4 key购买 nike

假设我想在两个字符串之间添加一些空格,如果我知道要添加的空间量为 10(在编译时),我可以这样做:

String s = String.format("%-10s %s", "Hello", "World");

但是如果我不知道它是 10,如果我必须在运行时计算出来怎么办?

int space = new java.util.Random().nextInt(n);
String s = String.format("-???%s %s, "Hello", "World");

我知道我可以连接

String.format("%-" + space + "s %s";, "Hello", "World"));

但这感觉像是一个肮脏的黑客。有没有一种不那么麻烦的方法来在运行时指定参数? Formatter帮助不大。我知道更好、更有效的操作字符串的方法,但我很好奇是否可以使用 String.format 而不需要 hack。

最佳答案

这并不是真正的肮脏黑客行为。 String.format() 函数需要一个定义格式的String。如果该 String 是您必须在运行时生成的内容,那么使用任何必要的方法来执行此操作都是可以接受的,即使它是对 String.format()< 的另一次调用。在我看来,将格式字符串存储在单独的变量中而不是嵌套调用将使您的代码更清晰:

int width = ...;
String fmt = String.format("-%i%%s %%s", width);
String formatted = String.format(fmt, "Hello", "World");

相对于:

int width = ...;
String formatted = String.format(String.format("-%i%%s %%s", width), "Hello", "World");

前者是清晰且相当自记录的。如果您喜欢的话,您也可以通过串联来构造字符串,提前或内联:

int width = ...;
String fmt = "-" + width + "%s %s";
String formatted = String.format(fmt, "Hello", "World");

或者:

int width = ...;
String formatted = String.format("-" + width + "%s %s", "Hello", "World");

这对我来说也看起来很清楚。无论您是内联还是提前进行,实际上都取决于个人喜好;对于更复杂的格式化字符串,差异可能更明显。

添加解释性注释可以解决任何困惑,并且可能是您可以做的清理代码的最重要的事情。

关于java - String.format 运行时格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19803405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com