不带逗号的 Java 资源包格式

Posted

技术标签:

【中文标题】不带逗号的 Java 资源包格式【英文标题】:Java resource bundle formatting with out commas 【发布时间】:2013-05-07 03:32:52 【问题描述】:

我有一个 web 服务实现,它验证请求并在响应中写入错误消息。响应不是所需的格式。

错误消息模板位于资源包属性文件中。

...

key=Plant name 0 Plant Id 1.

...

这是我在验证后收到的错误消息。

Plant name PLANT1 Plant Id 9,905,005.

但所需的输出是数字变量不带逗号。

Plant name WPLANT Plant Id 9905005.

这是我的代码。

private String getErrorMessage(String messageKey, Object... args) 
    ResourceBundle messages = ResourceBundle.getBundle("ErrorMessageResourceBundle");
    MessageFormat formatter = new MessageFormat("");
    formatter.applyPattern(messages.getString(messageKey));
    String output = formatter.format(args);
    return output;

我用下面的键和变量调用这个方法。

...
getErrorMessage(key,"PLANT1",9905005)
...

如何更改此代码以获得所需的输出?我更喜欢不包含 %s, %d 的方法,从那时起我就无法在属性文件的错误消息中更改变量的顺序。

【问题讨论】:

【参考方案1】:

您可以使用子格式模式。 示例:

MessageFormat formatter = new MessageFormat("0 1,number,###0");

所以代码应该是这样的:

private String getErrorMessage(String messageKey, Object... args) 
    ResourceBundle messages = ResourceBundle.getBundle("ErrorMessageResourceBundle");
    MessageFormat formatter = new MessageFormat("0 1,number,###0");
    formatter.applyPattern(messages.getString(messageKey));

    String output = formatter.format(args);
    return output;

在此处阅读 Oracle 关于 SubFormatPattern 的文档: http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html#patterns

【讨论】:

感谢您的回答。但它仍然打印输出 with 逗号。【参考方案2】:

您始终可以先将数字转换为String

getErrorMessage(key,"PLANT1", String.valueOf(9905005))

这应该可行。我怀疑消息格式化程序 aauto 会根据您的语言环境检测到该数字并将其格式化为一个。

【讨论】:

以上是关于不带逗号的 Java 资源包格式的主要内容,如果未能解决你的问题,请参考以下文章

PHP数字格式不带逗号

打印不带括号和逗号的数组

android - 格式化 Double 并将其放入 TextView 中,不带逗号(如果需要)

jQuery返回不带逗号的字符串的前5个单词

小数的 SQL 格式,用逗号表示小数,仅用于数字

用逗号格式化数字PHP [重复]