0

假设我想在两个字符串之间添加一些空格,如果我知道要添加的空间量为 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"));

但这感觉就像一个肮脏的黑客。是否有一种在运行时指定参数的不那么老套的方法?格式化程序没有什么帮助。我知道更好、更有效的处理字符串的方法,但我很好奇如果String.format没有 hack 是否有可能。

4

1 回答 1

2

这不是一个肮脏的黑客。该String.format()函数需要String定义格式。如果这String是您必须在运行时生成的东西,那么使用任何必要的手段来做到这一点是可以接受的,即使它是对String.format(). IMO,它将格式字符串存储在单独的变量中而不是嵌套调用,这将使您的代码更加清晰:

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");

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

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

于 2013-11-06T03:16:07.330 回答