Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String.format运行时格式_Java_Formatter - Fatal编程技术网

Java String.format运行时格式

Java String.format运行时格式,java,formatter,Java,Formatter,假设我想在两个字符串之间添加一些空间,如果我知道要添加的空间量为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"); 我知道我可以连接 St

假设我想在两个字符串之间添加一些空间,如果我知道要添加的空间量为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
,而不使用黑客技术。

这不是一个真正的肮脏的黑客技术。
String.format()
函数需要定义格式的
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");
或:

我也很清楚这一点。你是直接做还是提前做取决于个人喜好;对于更复杂的格式字符串,差异可能更明显


添加解释性注释可以避免任何混淆,这可能是清理代码所能做的最重要的事情。

可以使用两个format()调用—一个用于创建格式字符串,另一个用于创建输出字符串。虽然我怀疑连接可能同样简单,而且可能更易于维护。连接是您应该做的。为什么您认为这是一个肮脏的黑客行为?因为它似乎是Formatter类应该实现的东西,而我找不到它。类似于String.format(“-{n}%s”,n,“HelloWorld”);
int width = ...;
String formatted = String.format("-" + width + "%s %s", "Hello", "World");