如何在 Java 中格式化字符串

新手上路,请多包涵

原始问题,但我如何格式化这样的字符串:

“第 {1} 步,共 {2} 步”

通过使用 Java 替换变量?在 C# 中很容易。

原文由 katit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 394
2 个回答

除了 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 中的可变参数和自动装箱改进,并将上面的代码变成了一个单行代码:

 MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");

MessageFormat 使用 choice 修饰符进行国际化复数会更好一些。要指定一条消息在变量为 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) });

原文由 ataylor 发布,翻译遵循 CC BY-SA 3.0 许可协议

看看 String.format 。但是请注意,它采用类似于 C 的 printf 函数系列的格式说明符——例如:

 String.format("Hello %s, %d", "world", 42);

将返回“Hello world, 42”。在了解格式说明符时,您可能会发现 很有帮助。 Andy Thomas-Cramer 非常友好地在下面的评论中留下 了这个 链接,这似乎指向官方规范。最常用的是:

  • %s - 插入一个字符串
  • %d - 插入一个有符号整数(十进制)
  • %f - 插入一个实数,标准符号

这与 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题