这是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中获得相同的含义?
答案 0 :(得分:3)
这在java.text.MessageFormat
上有详细说明。您传递给MessageFormat.format()
的字符串是 pattern 。模式由 format元素组成。格式元素的形式为:
FormatElement:
{ ArgumentIndex }
{ ArgumentIndex , FormatType }
{ ArgumentIndex , FormatType , FormatStyle }
因此在第一个格式元素中:
{0,number,#}
0
是要格式化其值的参数索引。
number
是一种格式类型,而#
是一种格式样式,更具体地说是 subformat模式。这意味着参数将使用以下子格式设置格式:
new DecimalFormat(subformatPattern, DecimalFormatSymbols.getInstance(getLocale()))
java.text.DecimalFormat
中描述了#
子格式。它只是意味着不使用小数位数,仅将其显示为整数,如果不是整数,则将四舍五入(使用RoundingMode.HALF_EVEN
模式)。
在“转到整数格式”中,您可以像以前一样简单地使用%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"