当前位置: 首页 > 编程笔记 >

Java中的MessageFormat.format用法实例

任伟
2023-03-14
本文向大家介绍Java中的MessageFormat.format用法实例,包括了Java中的MessageFormat.format用法实例的使用技巧和注意事项,需要的朋友参考一下

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 (子格式模式,形如#.##)


还以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


使用双引号和两个单引号没有关系,比如

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


3、无论是有引号字符串还是无引号字符串,左花括号都是不支持的,如:

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,



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的使用,主要分为两个操作