2012-08-26 19 views
22

我敢肯定,我已經看到了String.format像這樣使用前:正確的格式字符串的String.format或類似

String.format("Some {1}, {2}, {3}", var1, var2, var3); 

這是否響任何人任何鐘聲?也許我在想C#,有沒有在java中實現相同的方法?

我知道你可以這樣做:

String.format("Some %s, %d, %s", aString, aNumber, aString) 

但我以後語法是前者...

+0

能否請您詳細說明您的qustion一點? –

回答

30

你在找什麼是MessageFormat,它使用給定的格式和輸入參數,例如

MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3); 

而且如前所述,String.format仍然可以使用替代語法的工作,但它在功能不太強大,而不是你的要求是什麼。

+1

做了一些研究:的String.format其實比MessageFormat中新。他們使用不同的方法,但在整體功能上差別不大。據說String.format更快。 –

+0

不錯。在Android中也存在。一種非常簡單的格式化方法。不需要提供輸入類型是一個優點。 –

10

是的,這就是C#典型format字符串。在Java中,你可以使用後者,也就是String.format("%s %d %d", ...)

替代是使用MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3),它使用.NET花括號符號,如@Tobias提到,儘管它需要你導入java.text.MessageFormat。他們也更適合當你正在處理的本地化資源,在這裏你通常的格式Error {0} ocurred due to {1}外部.properties文件與消息。

3

我不喜歡指定參數,或者其類型的兩個指標 - 拋出異常,併爲它準備的消息主要是當。我喜歡SLF4j的方式。所以我裹org.slf4j.helpers.MessageFormatter這樣的:

public static String subst(String string, Object...objects) { 
    return MessageFormatter.arrayFormat(string, objects).getMessage(); 
} 

然後你可以使用它像這樣:

public void main(String[] args) { 
    throw new RuntimeException(MyUtils.subst("Problem with A={} and B={}!", a, b)); 
}