首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中格式化字符串

如何在Java中格式化字符串
EN

Stack Overflow用户
提问于 2011-06-22 05:02:43
回答 9查看 269.6K关注 0票数 223

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

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

通过使用Java替换变量?在C#中,这很简单。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-06-22 05:18:15

除了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");

在使用i18nized修饰符做选择复数时,MessageFormat稍微好一点。要指定在变量为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) });
票数 161
EN

Stack Overflow用户

发布于 2011-06-22 05:13:05

如果选择不使用String.format,则另一个选项是+二元运算符

String str = "Step " + a + " of " + b;

这相当于

new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));

无论使用哪一个,都是您的选择。StringBuilder更快,但速度差异很小。我更喜欢使用+运算符(它执行StringBuilder.append(String.valueOf(X)))并发现它更容易阅读。

票数 10
EN

Stack Overflow用户

发布于 2020-09-08 03:06:58

Java 15

从Java15开始,有了一个名为String::formatted(Object... args)的新实例方法。

内部实现与String::format(String format, Object... args)相同。

使用此字符串作为格式字符串以及提供的参数进行格式化。

String step1 = "one";
String step2 = "two";

// results in "Step one of two"
String string = "Step %s of %s".formatted(step1, step2);     

Advantage:不同之处在于该方法不是static,并且格式化模式本身是一个字符串,根据args从该字符串创建一个新的字符串。这允许链接首先构建格式本身。

DisadvantageLocale没有重载方法,因此使用默认方法。如果您需要使用自定义Locale,则必须坚持使用String::format(Locale l,String format,Object... args)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6431933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档