原始问题,但我如何格式化这样的字符串:
“第 {1} 步,共 {2} 步”
通过使用 Java 替换变量?在 C# 中很容易。
原文由 katit 发布,翻译遵循 CC BY-SA 4.0 许可协议
原始问题,但我如何格式化这样的字符串:
“第 {1} 步,共 {2} 步”
通过使用 Java 替换变量?在 C# 中很容易。
原文由 katit 发布,翻译遵循 CC BY-SA 4.0 许可协议
看看 String.format 。但是请注意,它采用类似于 C 的 printf 函数系列的格式说明符——例如:
String.format("Hello %s, %d", "world", 42);
将返回“Hello world, 42”。在了解格式说明符时,您可能会发现 这 很有帮助。 Andy Thomas-Cramer 非常友好地在下面的评论中留下 了这个 链接,这似乎指向官方规范。最常用的是:
这与 C# 截然不同,后者使用带有可选格式说明符的位置引用。这意味着您不能执行以下操作:
String.format("The {0} is repeated again: {0}", "word");
…实际上没有重复传递给 printf/format 的参数。 (请参阅下面的 Scrum Meister 评论)
如果您只是想直接打印结果,您可以根据自己的喜好找到 System.out.printf ( PrintStream.printf )。
原文由 Martin Törnwall 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
除了 String.format,还看看
java.text.MessageFormat
。格式不那么简洁,更接近您提供的 C# 示例,您也可以将其用于解析。例如:
一个更好的例子利用了 Java 1.5 中的可变参数和自动装箱改进,并将上面的代码变成了一个单行代码:
MessageFormat
使用 choice 修饰符进行国际化复数会更好一些。要指定一条消息在变量为 1 时正确使用单数形式,否则为复数形式,您可以这样做: