[英]Message format in java and how to replicate the same in Golang
這是Java代碼:
AtomicInteger obIndex = new AtomicInteger(0);
MessageFormat.format("{0,number,#},{1},{2},{3},\"{4}\"",
obIndex.getAndIncrement(),
"5bb2b35c67525f9e845648df370652b8",
"Vm:vm-289",
"1.1.1.1:113",
"ABC-Testvm-1");
輸出:
0,5bb2b35c67525f9e845648df370652b8,Vm:vm-289,1.1.1.1:113,"ABC-Testvm-1"
我在Go中試過這個:
value := fmt.Sprintf("%d,%s,%s,%s,%s",
0,
"5bb2b35c67525f9e845648df370652b8",
"Vm:vm-289",
"1.1.1.1:113", "ABC-Testvm-1")
fmt.Println(value)
哪個輸出:
0,5bb2b35c67525f9e845648df370652b8,Vm:vm-289,1.1.1.1:113,ABC-Testvm-1
{0,number,#}
什么意義?如何在Go中獲得相同的內容?
這在java.text.MessageFormat
有詳細說明。 傳遞給MessageFormat.format()
的字符串是一種模式 。 模式由格式元素組成 。 格式元素的形式是:
FormatElement:
{ ArgumentIndex }
{ ArgumentIndex , FormatType }
{ ArgumentIndex , FormatType , FormatStyle }
所以在第一個格式元素中:
{0,number,#}
0
是要格式化的值的參數索引。
number
是格式類型, #
是格式樣式,更具體地說是子格式 。 這意味着參數將使用以下子格式進行格式化:
new DecimalFormat(subformatPattern, DecimalFormatSymbols.getInstance(getLocale()))
在#
子格式在描述java.text.DecimalFormat
。 它只是意味着不使用小數位,只顯示為整數,如果它不是整數,它將被舍入(使用RoundingMode.HALF_EVEN
模式)。
在Go中格式化整數,您可以像使用%d
動詞一樣使用,這將為整數生成相同的輸出格式。 如果該數字是浮點數,則不起作用( %d
只能用於整數)。 如果數字是浮點數,請使用%f
動詞,更具體地說%.0f
告訴它舍入為整數,或者使用最短格式%.f
。
此外,您的Java版本將最后一個參數放在雙引號中,因此您應該在Go中執行相同的操作。
value := fmt.Sprintf("%d,%s,%s,%s,\"%s\"",
0,
"5bb2b35c67525f9e845648df370652b8",
"Vm:vm-289",
"1.1.1.1:113", "ABC-Testvm-1")
fmt.Println(value)
這將輸出(在Go Playground上嘗試):
0,5bb2b35c67525f9e845648df370652b8,Vm:vm-289,1.1.1.1:113,"ABC-Testvm-1"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.