java MessageFormat.format 用法
FormatElement:
{ ArgumentIndex }:是从0开始的入参位置索引。
{ ArgumentIndex , FormatType }
{ ArgumentIndex , FormatType , FormatStyle }
FormatType: :指定使用不同的Format子类对入参进行格式化处理。值范围如下:
number:调用NumberFormat进行格式化
date:调用DateFormat进行格式化
time:调用DateFormat进行格式化
choice:调用ChoiceFormat进行格式化
FormatStyle::设置FormatType中使用的格式化样式。值范围如下:
short
medium
long
full
integer
currency
percent
SubformatPattern (子格式模式,形如#.##)
还以str为例,在这个字符串中:
1、{0}和{1,number,short}和{2,number,#.#};都属于FormatElement,0,1,2是ArgumentIndex。
2、{1,number,short}里面的number属于FormatType,short则属于FormatStyle。
3、{1,number,#.#}里面的#.#就属于子格式模式。
指定FormatType和FormatStyle是为了生成日期格式的值、不同精度的数字、百分比类型等等。
实例:
1、ArgumentIndex必须是非负整数,它的个数不只限于0到9这10个,它可以用0到9的数字组成,因此可以有好多个,如:
String msg = "{0}{1}{2}{3}{4}{5}{6}{7}{8}";
Object [] array = new Object[]{"A","B","C","D","E","F","G","H","I",};
String value = MessageFormat.format(msg, array);
System.out.println(value); // 输出:ABCDEFGHI
2、格式化字符串时,两个单引号才表示一个单引号,单个单引号会被省略,除非中文单引号不会被省略,如:
String value = MessageFormat.format("oh, {0} is 'a' pig", "ZhangSan");
System.out.println(value); // 输出:oh, ZhangSan is a pig
给字母a加上单引号,如:
String value = MessageFormat.format("oh, {0} is ''a'' pig", "ZhangSan");
System.out.println(value); // 输出:oh, ZhangSan is 'a' pig
如果需要显示双引号要进行转移,比如:String msg = "oh, {0} is "a" pig";
3、单引号会使其后面的占位符均失效,导致直接输出占位符。
MessageFormat.format("{0}{1}", 1, 2); // 结果12
MessageFormat.format("'{0}{1}", 1, 2); // 结果{0}{1}
MessageFormat.format("'{0}'-{1}", 1, 2); // 结果{0}-2
4、使用双引号和两个单引号没有关系,比如
String value = MessageFormat.format("oh, ''{0}'' is a pig", "ZhangSan");
System.out.println(value); // 输出:oh, 'ZhangSan' is a pig
又比如,使用子格式模式,多了一个单引号:
String value = MessageFormat.format("oh, {0,number,#.#} is good num", Double.valueOf("3.1415"));
System.out.println(value); // 输出:oh, 3.1 is good num
5、无论是有引号字符串还是无引号字符串,左花括号都是不支持的,如:
String value = MessageFormat.format("oh, } is good num", Double.valueOf("3.1415"));
System.out.println(value); // 输出:oh, } is good num
如果使用左花括号会出现异常
String value = MessageFormat.format("oh, { is good num", Double.valueOf("3.1415"));
System.out.println(value); // java.lang.IllegalArgumentException: Unmatched braces in the pattern.
因此要使用到左花括号需要使用单引号配合使用
MessageFormat.format("'{'{0}}", "X-rapido"); // {X-rapido}
还有一个有趣的现象,如果出现两个或2个以上左花括号,就会出现分割字符串,但是右花括号就没问题,虽然没有任何意义,实际应用我们也用不到
String value = MessageFormat.format("oh, {{ is good num", "d");
System.out.println(value); // oh,
[java] view plain copy print?
String value = MessageFormat.format("oh, }} is good num", "d");
System.out.println(value); // oh, }} is good num
关于MessageFormat.format方法:
每调用一次MessageFormat.format方法,都会新创建MessageFormat的一个实例,相当于MessageFormat只使用了一次。MessageFormat类的format方法如下:
public static String format(String pattern, Object ... arguments)
{
MessageFormat temp = new MessageFormat(pattern);
return temp.format(arguments);
}
因此若要多次格式同一个模式的字符串,那么创建一个MessageFormat实例在执行格式化操作比较好些
String message = "oh, {0} is a pig";
MessageFormat messageFormat = new MessageFormat(message);
Object[] array = new Object[]{"ZhangSan"};
String value = messageFormat.format(array);
System.out.println(value);
查看原文:http://www.ibloger.net/article/139.html
java MessageFormat.format 用法的更多相关文章
- MessageFormat.format用法
用法一: package gacl.request.study; import java.io.IOException; import java.text.MessageFormat; import ...
- MessageFormat.format()用法
1.java.text.Format的继承结构如下 2.MessageFormat模式 FormatElement { ArgumentIndex }:是从0开始的入参位置索引 { Argumen ...
- java MessageFormat.format
sql 语句中格式化,如果加入{}占位符,要替代的是整形变量,而恰好这个整形变量的位数超过4位, MessageFormat.format 会在这个整形变量中默认每隔三位加一个逗号,类似这样:1000 ...
- 关于java中MessageFormat.format中单引号问题
我们知道java中可以用MessageFormat.format来格式化字符串.这个方法在我们的实际开发中经常用到,有点类似模板,这样我们就不需要用很恶心的拼接字符串了.如下面 String s1=& ...
- Java魔法堂:初探MessageFormat.format和ChoiceFormat
一.前言 刚开始从.net的转向java的时候总觉得 String.format 用得不习惯,希望格式模版会这样 {}, }$s,$s's cat.%2$s,this is %1$s's dog. . ...
- MessageFormat的用法,java动态替换String字符串中的占位符
import java.text.MessageFormat; import java.util.GregorianCalendar; import java.util.Locale; public ...
- String.format和MessageFormat.format的对比用法
1.MessageFormat.format import java.text.MessageFormat; /** * Created by SYJ on 2017/9/13. */ public ...
- 在Java程序中做字符串拼接时一定要记得的MessageFormat.format
Java里从来少不了字符串拼接的活,Java程序员也肯定用到过StringBuffer,StringBuilder,以及被编译器优化掉的+=.但这些都和下文要谈的无关. 比如有这样的字符串: 张三将去 ...
- Java程序中做字符串拼接时可以使用的MessageFormat.format
Java里从来少不了字符串拼接的活,Java程序员也肯定用到过StringBuffer,StringBuilder,以及被编译器优化掉的+=.但这些都和下文要谈的无关. 比如有这样的字符串: 张三将去 ...
随机推荐
- xml转为array
PHP实现微信支付,微信支付宝返回的xml结果如下: <xml> <appid><![CDATA[wx2421b1c4370ec43b]]></appid ...
- 4.3 Routing -- Generated Objects
就像在routing guide中介绍的那样,不管什么时候你在路由器中定义一个新路径,Ember.js就会尝试寻找一个对应的route,controller,template,它们的命名都是根据命名约 ...
- oracle_多字段统计(多count)
oracle_多字段统计 查询同一张表中同一字段的不同值的综合,方法如下: select o.code 礼品代码, o.name 礼品名称, l.couponactivityid 券活动定义, cou ...
- Javaworkers团队第四周项目总结
本周项目进展 本周是我们的项目开发的第四周,在之前的一周,我们小组在合作的情况下基本完成了项目代码的框架编写,我们组的项目课题,小游戏--贪吃蛇以及可以运行,可以进行简单的游戏,但是我们在思考之后发现 ...
- 初识PHP(一)基础语法
一直准备学习PHP,结果前一段时间总是有事情,耽误了一阵子.现在赶快迎头赶上! 这个系列只是谈谈我对于PHP的一些看法,不是教程性质的.另外我是小白,只是写写随笔,大神求轻拍.本人学习过c .java ...
- MAC、MII、PHY的关系与区别
嗯,实验室的嵌入式项目需要写设备驱动,我分到了网络驱动的活,写一个适配SylixOS的(这里夸一句,这个真是国内相当不错的嵌入式实时操作系统了)MPC8377的网卡驱动,说实话原来从来没接触过写驱动的 ...
- JVM的异常处理
异常处理的两大组成要素:抛出异常和捕获异常.这两大要素共同实现程序控制流的非正常转移. 抛出异常分为:显式和隐式两种. 显式抛异常的主题是应用程序,它指的是在程序中使用 “throw” 关键字.手动 ...
- Python学习札记(二十二) 函数式编程3 filter & SyntaxError: unexpected EOF while parsing
参考: filter Problem SyntaxError: unexpected EOF while parsing 遇到该语法错误,一般是由于 括号不匹配 问题. Note 1.filter 用 ...
- Codeforces Round #419 (Div. 2) B. Karen and Coffee(经典前缀和)
http://codeforces.com/contest/816/problem/B To stay woke and attentive during classes, Karen needs s ...
- Codeforces Round #390 (Div. 2) D. Fedor and coupons(区间最大交集+优先队列)
http://codeforces.com/contest/754/problem/D 题意: 给定几组区间,找k组区间,使得它们的公共交集最大. 思路: 在k组区间中,它们的公共交集=k组区间中右端 ...