java.text.MessageFormat不带数字分组分隔符
是否可以为java.text.MessageFormat定义一种格式,该格式可以在不使用.toString()对分隔符和其他对象进行分组的情况下格式化数字 我的问题是,我必须格式化一个参数,我事先不知道它是否是一个数字。如果我用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.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。