Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.text.MessageFormat不带数字分组分隔符_Java_Messageformat - Fatal编程技术网

java.text.MessageFormat不带数字分组分隔符

java.text.MessageFormat不带数字分组分隔符,java,messageformat,Java,Messageformat,是否可以为java.text.MessageFormat定义一种格式,该格式可以在不使用.toString()对分隔符和其他对象进行分组的情况下格式化数字 我的问题是,我必须格式化一个参数,我事先不知道它是否是一个数字。如果我用 java.text.MessageFormat.format("The object: {0}",someobject) 这通常只是调用someobject.toString(),但当someobject实际上是一个数字1231231时,它会返回(在德语区域设置中)对

是否可以为java.text.MessageFormat定义一种格式,该格式可以在不使用.toString()对分隔符和其他对象进行分组的情况下格式化数字

我的问题是,我必须格式化一个参数,我事先不知道它是否是一个数字。如果我用

java.text.MessageFormat.format("The object: {0}",someobject)
这通常只是调用
someobject.toString()
,但当
someobject
实际上是一个数字
1231231
时,它会返回(在德语区域设置中)
对象:1231231231
,但我想要
对象:1231231
。格式化为

java.text.MessageFormat.format("{0,number,#}",1231231)
返回
对象:1231231
,但当参数不是数字时,这不起作用。有没有办法指定一种既适用于数字又适用于其他对象的格式

(如果您想知道:不幸的是,更改MessageFormat的区域设置不是一个选项,因为它深深地埋藏在JBoss的日志框架中,无法访问。)

更新:在将String.valueOf(someobject)作为参数传递之前调用它可以解决此问题,但在我的情况下也不可行,因为此问题发生在日志记录时,我不想调用可能昂贵的someobject.toString()当日志记录级别不允许日志消息,因此永远不会应用MessageFormat时。

这种方法的一种变体可以避免调用someobject.toString()。当由于日志级别被禁止而没有实际使用时,可以包装该对象,以便只在使用时调用toString。不过,这似乎还是有点尴尬

    final String format = MessageFormat.format("The object: {0}", a == null ? null : a.toString());

    System.out.println("format = " + format);
public Object wrapToString(Object obj) {
    return new Object() {
        /** {@inheritDoc} */
        @Override
        public String toString() {
            return String.valueOf(obj);
        }
    };
}

同样,在日志语句中添加loglevel检查也可能会污染代码,这可能会更好,也可能不会更好,这取决于您的品味。

他们建议您拨打
Long.toString()
,拨打您需要的号码,但不带逗号,谢谢!这确实是一个解决这个问题的想法(我建议使用java.lang.String.valueOf(Object))但不幸的是,在我的设置中存在性能缺陷——我相应地更新了这个问题。Jboss的框架最终使用了MessageFormat。