1

这是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

Go的意义是什么,{0,number,#}我怎样才能得到相同的含义?

4

1 回答 1

3

这在 中有详细说明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 to format an integer number 中,您可以%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"
于 2018-10-08T15:01:28.717 回答