MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不同语言环境的消息。
MessageFormat模式(主要部分):
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 (子格式模式,形如#.##)
指定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
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
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.
String value = MessageFormat.format("oh, {{ is good num", "d");System.out.println(value); // oh,
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);
问题内容: 我已经在资源束中存储了一些消息。我正在尝试按以下格式设置这些消息。 假设第一个参数(即实际消息)存储在以某种方式检索到的属性文件中。 第二个参数(即5)是一个动态值,应放置在不会发生的占位符中。下一行打印, 您即将删除{0}行。 占位符不会替换为实际参数。 这里是撇号- 。我试图像往常一样逃避它,尽管它没有用。需要进行哪些更改才能使其正常工作? 问题答案: 向模式添加多余的撇号以确保显
本文向大家介绍java中gc算法实例用法,包括了java中gc算法实例用法的使用技巧和注意事项,需要的朋友参考一下 在我们对gc中的算法有基本概念理解后,要把算法的理念实现还需要依托实际垃圾收集器的使用。因为光靠一些简单的原理不足以支撑整个程序的运行,在回收机制上有专门的收集器。下面我们就垃圾收集器的概念、使用注意事项、收集器图解进行介绍,然后带来两种常见的垃圾收集器供大家参考。 1.概念 垃圾收
本文向大家介绍Java 中This用法的实例详解,包括了Java 中This用法的实例详解的使用技巧和注意事项,需要的朋友参考一下 Java 中This用法的实例详解 用类名定义一个变量的时候,定义的只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法。 那们类里面是够也应该有一个引用来访问自己的属性和方法纳? 呵呵,Java提供了一个很好的东西,就是 this 对象,
本文向大家介绍Java中的多态用法实例分析,包括了Java中的多态用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中的多态用法。分享给大家供大家参考。具体分析如下: 多态,是面向对象的程序设计语言最核心的特征。封装性、继承性都比较简单,所以这里只对多态做一个小小的笔记。。。 1、什么是多态? 多态意味着一个对象可以多重特征,可以在特定的情况下,表现出不同的状态,从而应对
本文向大家介绍java中DelayQueue实例用法详解,包括了java中DelayQueue实例用法详解的使用技巧和注意事项,需要的朋友参考一下 在阻塞队里中,除了对元素进行增加和删除外,我们可以把元素的删除做一个延迟的处理,即使用DelayQueue的方法。这里的删除需要一定的时间才能生效,有点类似于过期处理的理念。下面我们就DelayQueue的概念、特点进行讲解,然后在代码示例中体会Del
本文向大家介绍Java字节码中jvm实例用法,包括了Java字节码中jvm实例用法的使用技巧和注意事项,需要的朋友参考一下 要想使Java运行,我们可以设计一个面向Java语言特性的虚拟机,并通过编译器将Java程序转换为它可以识别的指令序列,也称为Java字节码。由于Java字节码指令的操作码被固定为一个字节,所以它的名字就这样命名了。本篇要带来的是Java字节码中jvm的使用,主要分为两个操作