如何在 Java 中设置字符串的格式
2022-08-31 05:34:33
原始问题,但我如何格式化字符串,如下所示:
“{2}的步骤{1}”
通过使用Java替换变量?在 C# 中,这很容易。
原始问题,但我如何格式化字符串,如下所示:
“{2}的步骤{1}”
通过使用Java替换变量?在 C# 中,这很容易。
看看 String.format。但是,请注意,它需要类似于C的printf系列函数的格式说明符 - 例如:
String.format("Hello %s, %d", "world", 42);
会返回“Hello world, 42”。在了解格式说明符时,您可能会发现这很有帮助。安迪·托马斯-克莱默(Andy Thomas-Cramer)很好心地在下面的评论中留下了这个链接,这似乎指向了官方规范。最常用的是:
这与 C# 完全不同,C# 使用带有可选格式说明符的位置引用。这意味着你不能做这样的事情:
String.format("The {0} is repeated again: {0}", "word");
...无需实际重复传递给 printf/format 的参数。(参见下面The Scrum Meister的评论)
如果您只想直接打印结果,您可能会根据自己的喜好找到System.out.printf(PrintStream.printf)。
除了String.format之外,还可以看看java.text.MessageFormat
。格式不那么简洁,更接近你提供的 C# 示例,你也可以使用它进行分析。
例如:
int someNumber = 42;
String someString = "foobar";
Object[] args = {new Long(someNumber), someString};
MessageFormat fmt = new MessageFormat("String is \"{1}\", number is {0}.");
System.out.println(fmt.format(args));
一个更好的例子利用了Java 1.5中的varargs和自动装箱改进,并将上述内容变成了一行:
MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");
MessageFormat
对于使用选择修饰符进行i18nized复数会更好一些。若要指定在变量为 1 且否则为复数时正确使用单数形式的消息,可以执行如下操作:
String formatString = "there were {0} {0,choice,0#objects|1#object|1<objects}";
MessageFormat fmt = new MessageFormat(formatString);
fmt.format(new Object[] { new Long(numberOfObjects) });