- 浏览: 516995 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
一。
MessageFormat
提供了以与语言无关方式生成连接消息的方式。使用此方法构造向终端用户显示的消息。
MessageFormat
获取一组对象,格式化这些对象,然后将格式化后的字符串插入到模式中的适当位置。
注:
MessageFormat
不同于其他 Format
类,因为
MessageFormat
对象是用其构造方法之一创建的(而不是使用 getInstance
MessageFormat
本身不实现特定于语言环境的行为。特定于语言环境的行为是由所提供的模式和用于已插入参数的子格式来定义的。
单引号的时候 如 String a = "abc'{0}'abc"; 必须改成 String a = "abc''{0}''abc";
MessageFormat运行开发者输出文本中的变量的格式。它是一个强大的类,就像下面的例子展示的那样:
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.
假如相同的信息需要被重复输出但是变量的值不同,那么创建一个MessageFormat对象并给出信息。下面是上面的例子的修正版:
//String output = MessageFormat.format(message, variables ); //变为: MessageFormat formatter = new MessageFormat(message); String output = formatter.format(variables);
除了可以处理日期、时间、数字和百分数外,MessageFormat也可以处理货币,运行更多的数字格式的控制并且答应指定ChoiceFormat。
MessageFormat是一个极好的类,它应该经常被使用但是现在还没有。它的最大的缺点是数据是被作为变量传递而不是一个Properties对
象。一个简单的解决办法是写一个封装类,它会预解析字符串为格式化的结果,将Properties的key转换为一个数组索引,顺序是
Properties.keys( )返回的顺序。
二。例子
<!-- Generated by javadoc (build 1.6.0-beta2) on Fri Mar 09 12:51:16 CST 2007 -->
第一个例子
使用静态的方法 MessageFormat.format
,它在内部创建一个只使用一次的
MessageFormat
:
int planet = 7; String event = "a disturbance in the Force"; String result = MessageFormat.format( "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.", planet, new Date(), event);
输出为:
At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
下面的例子创建了一个可以重复使用的 MessageFormat
实例:
int fileCount = 1273; String diskName = "MyDisk"; Object[] testArgs = {new Long(fileCount), diskName}; MessageFormat form = new MessageFormat( "The disk \"{1}\" contains {0} file(s)."); System.out.println(form.format(testArgs));
不同 fileCount
值的输出:
The disk "MyDisk" contains 0 file(s). The disk "MyDisk" contains 1 file(s). The disk "MyDisk" contains 1,273 file(s).
对于更复杂的模式,可以使用 ChoiceFormat
来生成正确的单数和复数形式:
MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}."); double[] filelimits = {0,1,2}; String[] filepart = {"no files","one file","{0,number} files"}; ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart); form.setFormatByArgumentIndex(0, fileform); int fileCount = 1273; String diskName = "MyDisk"; Object[] testArgs = {new Long(fileCount), diskName}; System.out.println(form.format(testArgs));
不同的 fileCount
值的输出:
The disk "MyDisk" contains no files. The disk "MyDisk" contains one file. The disk "MyDisk" contains 1,273 files.
如上例所示,可以以编程方式来创建 ChoiceFormat
,或使用模式创建。有关更多信息,请参阅 ChoiceFormat
。
form.applyPattern( "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.");
注:
从上面的例子可以看到,由 MessageFormat
中的
ChoiceFormat
所生成的字符串要进行特殊处理;'{' 的出现用来指示子格式,并导致递归。如果
MessageFormat
和 ChoiceFormat
都是以编程方式创建的(而不是使用字符串模式),那么要注意不要生成对其自身进行递归的格式,这将导致无限循环。
当一个参数在字符串中被多次解析时,最后的匹配将是解析的最终结果。例如,
MessageFormat mf = new MessageFormat("{0,number,#.##}, {0,number,#.#}"); Object[] objs = {new Double(3.1415)}; String result = mf.format( objs ); // result now equals "3.14, 3.1" objs = null; objs = mf.parse(result, new ParsePosition(0)); // objs now equals {new Double(3.1)}
同样,使用包含同一参数多个匹配项的模式对 MessageFormat 对象进行解析时将返回最后的匹配。例如,
MessageFormat mf = new MessageFormat("{0}, {0}, {0}"); String forParsing = "x, y, z"; Object[] objs = mf.parse(forParsing, new ParsePosition(0)); // result now equals {new String("z")}
同步
消息格式不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
发表评论
文章已被作者锁定,不允许评论。
-
Java8 ,JDK1.8 新特性
2016-12-08 14:58 773一、接口的默认方法 Java 8允许我们给接口 ... -
Google Guava官方教程 学习
2016-12-05 17:43 346http://ifeve.com/google- ... -
Guava 相关内容(一)
2016-05-20 00:08 519一、Java 不可以变的集合 Guava学习笔记: ... -
poi excel 相关
2015-04-07 11:22 690一、poi excel 分组(group) ... -
java 相关问题(四)
2013-05-24 15:54 1245十九、Java中对Map(HashMap,TreeMap, ... -
apache-common
2013-01-09 10:47 1048... -
Java注释的写法
2012-11-16 15:02 781一. Java 文档 // 注释 ... -
正则表达式
2012-05-25 09:19 973编程的大量工作都是在处理字符串,如验证输入、查 ... -
java 相关问题(三)
2012-03-08 16:31 1502十三、java 实现 调用 打印机 代码详解 ... -
J2EE秘籍
2012-02-13 15:42 719转:http://zhufeng1981.iteye.com/ ... -
java 相关问题(二)
2011-08-02 15:47 1091七、ThreadLocal 详解 首先,Thre ... -
Apache Commons BeanUtils
2011-06-08 17:24 1546功能说明: 顾名思义,Bean Utility就是Bean小 ... -
java 相关问题(一)
2011-05-10 19:16 1031一、 java Cloneable 详 ... -
java 读写 properties
2011-04-19 14:15 1213一、 /* * @(#)RWProper ... -
JMS API 中文版
2011-04-13 14:20 826转:http://www.iteye.com/to ... -
ant 教程
2011-04-12 23:56 1157一、ant 教程 1 Ant是什么? ... -
properties 文件中 定义内容 相关问题
2011-02-22 20:41 2264一、在 properties 文件中 定义{ } 会 ... -
java 线程
2011-02-10 17:07 923一、 Runnable、 Thread ... -
java.util.logging (不用log4j配置,自己写log文件)
2010-10-11 11:55 7450<!-- Generated by javadoc ( ... -
java 静态块 非静态块
2010-09-21 17:39 1416一。一个简单的例子 1. 所有静态的(无论其是变量 ...
相关推荐
在Java编程中,`MessageFormat.format`方法是一个强大的工具,用于生成格式化的字符串,这些字符串可以适应不同的语言环境和数据类型。这个方法是基于`java.text.MessageFormat`类,它允许我们创建动态的、可重用的...
Java利用MessageFormat实现短信模板的匹配 在Java中,实现短信模板的匹配是一项非常重要的任务,而使用MessageFormat可以方便地实现这种匹配。MessageFormat是一个强大的工具,可以格式化字符串,使得我们可以灵活...
在Java编程语言中,`MessageFormat`类是用于格式化字符串的强大工具,它允许程序员根据指定的模式将变量数据插入到文本中。这个类是`java.text`包的一部分,主要用于国际化(i18n)和本地化(l10n)的应用场景。`...
MessageFormat mf = new MessageFormat(rb.getString("k1")); String formattedText = mf.format(new Object[]{"Tom"}); System.out.println(formattedText); ``` ### 小结 通过上述讨论,我们可以看到Struts2框架...
同时,由于其遵循ICU标准,使得数据交换和维护更为方便,与后端服务(如Java的Resource Bundle或Spring的MessageSource)的集成也更为顺畅。 总的来说,MessageFormat为前端开发者提供了一套强大且灵活的解决方案,...
`MessageFormat`是Java国际化(i18n)支持的一部分,它可以将变量替换为指定的值,使得输出的消息具有可读性和一致性。例如,假设我们有一个模板字符串`"欢迎,{0}!"`,我们可以使用`MessageFormat.format()`方法将...
`MessageFormat`类是Java中用于格式化多语言文本的强大工具,特别适用于国际化的场景。它可以动态插入变量到模板字符串中,并支持多种数据类型(如日期、时间、数字和货币)的格式化。例如: ```java String ...
MessageFormat是Java中用于格式化字符串的一个非常有用的类,它允许我们使用模板化的模式来插入变量值,并且支持多种格式,如数字、日期、时间等。这个类的主要优点在于其灵活性和可读性,使得代码更加清晰,易于...
在编程实践中,我们还需要使用`java.text.MessageFormat`类来处理包含变量的字符串,如: ```java String pattern = "{0} says hello to {1}"; String formatted = MessageFormat.format(pattern, "Alice", "Bob");...
7. **java.text**:处理文本格式化和解析,如DateFormat、NumberFormat、MessageFormat等。 8. **java.concurrent**:多线程和并发编程包,包括Thread、ExecutorService、Future、Semaphore等工具类。 9. **java....
8. **java.text**:处理文本格式化和解析,包括NumberFormat、DateFormat和MessageFormat。 9. **java.time**:自Java 8引入的新时间日期API,包括LocalDate、LocalTime、LocalDateTime和ZoneId,提供了更强大和...
1. **MessageFormat**:Java内置的格式化工具,支持复杂的字符串格式化,包括日期、数字和消息的国际化。 2. **I18N Lib**:开源库,提供了更方便的API来处理国际化,包括动态加载资源、自动处理编码转换等。 3. **...
10. **java.text**:处理文本格式化,如`NumberFormat`、`DateFormat`和`MessageFormat`,用于国际化和本地化。 在Java 1.6版本中,引入了增强的for循环(foreach loop),改进了泛型,添加了并发工具类如`...
5. **java.text**: 这个包包含处理文本、日期、数字和消息的类,如NumberFormat用于格式化数字,DateFormat用于日期和时间的格式化,MessageFormat用于构造和解析消息。 6. **java.time**: Java 8引入的新时间日期...
9. **国际化**:`java.util.Locale`和`java.text.MessageFormat`支持多语言环境,使应用能适应不同地区的文化习惯。 10. **XML处理**:`javax.xml`包提供了处理XML文档的API,如`DOM`和`SAX`解析器,以及`...
Java 期末复习涉及众多常用的类库,这些类库在日常编程中扮演着重要角色。首先,我们关注StringBuffer类,这是处理字符串时的一个关键选择,特别是在字符串需要频繁修改的情况下。StringBuffer提供了append方法来...
在国际化和本地化方面,`java.text`包下的`MessageFormat`和`ChoiceFormat`类得到改进,更便于处理多语言环境下的文本格式和选择表达。 Java 6.0还引入了新的脚本引擎API(JSR 223),允许Java程序内嵌入并执行各种...