Java 字符串格式化处理
今天读Apache 线程池源码时,读到了org.apache.catalina.util.StringManager
其实这个类就是负责字符串的格式化(国际化),主要用途在一场信息输出时。感觉这个处理异常信息的思路真的很好,不用再在程序的Catch中通过字符串拼接记录异常信息了。而起不好国际化和规格化,而通过用ResourceBundle和MesageFormat类的组合使用,并能很好的处理国际化和规格化,org.apache.catalina.util.StringManager就是一个这样的类。
前几篇文章介绍了ResourceBundle类的使用,在此在回忆一下MessageFormat类的使用。
我想大家都用过String类提供的format的方法吧,相对于string的format方法。MessageFormat类的format方法更强大,强大的功能可以比拼C语言中的printf中的格式输出功能。
?
下面是摘抄JDK1.6中的部分语法说明
MessageFormat 使用以下形式的模式:
MessageFormatPattern: String MessageFormatPattern FormatElement String FormatElement: { ArgumentIndex } { ArgumentIndex , FormatType } { ArgumentIndex , FormatType , FormatStyle } FormatType: one of number date time choice FormatStyle: short medium long full integer currency percent SubformatPattern String: StringPartopt String StringPart StringPart: '' ' QuotedString ' UnquotedString SubformatPattern: SubformatPatternPartopt SubformatPattern SubformatPatternPart SubFormatPatternPart: ' QuotedPattern ' UnquotedPattern
下面给出的几个例子
Caught exception ({0}) executing {1}, terminating thread
?
"Once upon a time ({1,date}, around about {1,time,short}), there " +
"was a humble developer named Geppetto who slaved for " +
"{0,number,integer} days with {2,number,percent} complete user " +
"requirements. ";
下面是java处理的代码
String message ="Once upon a time ({1,date}, around about {1,time,short}), there " +"was a humble developer named Geppetto who slaved for " +"{0,number,integer} days with {2,number,percent} complete user " +"requirements. ";Object[ ] variables = new Object[ ] { new Integer(4), new Date( ), new Double(0.21) }String output = MessageFormat.format( message, variables );System.out.println(output); 隐藏在信息中的是描述输出的格式的一种短小的代码,范例的输出如下:Once upon a time (Nov 3, 2002, around about 1:35 AM), there was a humble developer named Geppetto who slaved for 4 days with 21% complete user requirements.
?
?
这里需要注意的是模式里的索引是从0开始。
?
另外给出个性能的说明
如果只格式一种类型的话 Sting.format 要比String.replace 慢很多。