繁体   English   中英

String.format运行时格式

[英]String.format runtime formatting

假设我想在两个字符串之间添加一些空格,如果我知道要添加的空间量为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是您必须在运行时生成的,那么可以使用任何必要的方法来执行此操作,即使它是对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");

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM