Java中的字符串格式

Java中的字符串格式,java,string,Java,String,我最近使用python太多了,我忘了Java中是否有这样做的方法: print "I am a %s" % string 我在谷歌上搜索过,但如果你不知道这在每种语言中到底叫什么,很难找到像这样简单的东西 System.out.println( "I am a " + string ); 但我更喜欢这样: System.out.println( String.format( "I am a %s", string ) ); 两种可能的简单方法: String yourStringHere =

我最近使用python太多了,我忘了Java中是否有这样做的方法:

print "I am a %s" % string
我在谷歌上搜索过,但如果你不知道这在每种语言中到底叫什么,很难找到像这样简单的东西

System.out.println( "I am a " + string );
但我更喜欢这样:

System.out.println( String.format( "I am a %s", string ) );

两种可能的简单方法:

String yourStringHere = "human";
System.out.println(String.format("I am a %s", yourStringHere));

请注意,
printf()
不会打印换行符,因此您必须手动添加它(“\n”)。但是(感谢BalusC),您也可以在您的格式中使用
%n”
。它将被默认的系统换行符替换。(所以:
String.format(“我是%s%n,你的字符串)

两张照片都是
我是人类\n


在Java中,它被称为。请看一看。

您可以使用MessageFormat.format()来执行此操作,但您应该使用{0}(在本例中)而不是%s


如果您想要本地化您的程序,这是一种更好的方式(或者更糟,取决于您想要实现什么),因为它将自动使用本地化的数字格式。

您还可以使用
%n
表示平台默认换行符。这对跨平台兼容性更好:)@BalusC:哦!谢谢,我不知道。我将在功能中使用
%n
。我用谷歌搜索过,但很难[…]当你不知道这到底叫什么时-你有没有用谷歌搜索过这个问题的标题?嗯,我想我假设这是一个可以从“”调用的方法,而不是使用java字符串类。太多语言=\第一种语言实际上是i18n缺陷,因为您只是将值串联起来。不要用它。曾经第二个更好,但是如果你有两个字符串值,也就是说你必须使用两个“%s”占位符,它也会变成i18n缺陷:翻译人员将无法对句子重新排序。@PawełDyda你能更详细地说明为什么第一个是个问题吗?是不是因为单词可能需要重新排序?例如,如果这些术语永远不会被重新排序,例如(“我的名字是:”+名字),这仍然是一个问题吗?实际上,在应用程序中嵌入字符串不是一个问题吗?如果没有,那么我认为+和%s是一样的。也许我遗漏了什么?@Bill K:是的,那是因为整个句子可能需要重新排序。不幸的是,你不能说永远不会重新排序的条款存在。根据目标语言,它可能需要重新排序。我打赌,在阿拉伯语(从右到左书写系统)中,它应该看起来像:“你的名字:我的名字是”。至于硬编码字符串,这也是一种不好的做法,但我认为这是显而易见的。字符串连接不正确。
string.format()
比使用字符串、int、double等收缩字符串慢。。。。
System.out.printf("I am a %s\n", yourStringHere);
System.out.print(MessageFormat.format("I am a {0}", string));