返回顶部
首页 > 资讯 > 后端开发 > Python >Java中MessageFormat的使用详解
  • 418
分享到

Java中MessageFormat的使用详解

2024-04-02 19:04:59 418人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

用于字符串替换,你还在用以下的这种方法吗? String.fORMat(String format, Object... args) 这是String类型的静态方法,但是除此之外,

用于字符串替换,你还在用以下的这种方法吗?

String.fORMat(String format, Object... args)

这是String类型的静态方法,但是除此之外,jdk提供了更好用的字符串替换方法,就是

MessageFormat.format(String pattern, Object ... arguments)

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

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

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 

5、关于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); 

关于MessageFormat的详细资料请参阅JAVA文档:Http://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html

到此这篇关于Java中MessageFormat的使用详解的文章就介绍到这了,更多相关Java MessageFormat内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中MessageFormat的使用详解

本文链接: https://lsjlt.com/news/151965.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中MessageFormat的使用详解
    用于字符串替换,你还在用以下的这种方法吗? String.format(String format, Object... args) 这是String类型的静态方法,但是除此之外,...
    99+
    2024-04-02
  • Java使用MessageFormat应注意的问题
    目录问题现象问题排查如何解决问题现象 某个业务功能需要通过SSH协议执行命令查询一些数据,而某次查询居然没有得到任何结果,导致界面没有任何数据,但是手动执行这个命令又是能够查询到数据...
    99+
    2024-04-02
  • Java使用MessageFormat应注意什么问题
    本篇内容主要讲解“Java使用MessageFormat应注意什么问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java使用MessageFormat应注意什么问题”吧!问题排查看了一段时间...
    99+
    2023-07-02
  • 详解Java 中 RMI 的使用
    目录RMI 介绍RMI 工作原理RMI 开发RMI ServerRMI ClientRMI 测试serialVersionUID 的生成 RMI 介绍 RMI (Remote Met...
    99+
    2024-04-02
  • Java中Lombok的使用详解
    这篇文章主要介绍“Java中Lombok的使用详解”,在日常操作中,相信很多人在Java中Lombok的使用详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中Lombok的使用详解”的疑惑有所帮助!...
    99+
    2023-06-16
  • 详解Java中Javassist的使用
    目录开篇Javassist 常用类Javassist 的使用依赖代码示例如何实现类似 AOP 的功能开篇 说起 AOP 小伙伴们肯定很熟悉,无论是 JDK 动态代理或者是 CGLIB...
    99+
    2023-05-14
    Java Javassist使用 Java Javassist
  • Java中的SimpleDateFormat使用详解
    public class SimpleDateFormat extends DateFormatSimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -> text)、语法分析 ...
    99+
    2023-05-31
    simpledateformat 使用 dat
  • JAVA中ResourceBundle使用详解
    ResourceBundle是Java中一个用来读取本地化资源的类。它可以根据不同的语言环境加载不同的资源文件,使得程序能够根据用户...
    99+
    2023-09-13
    Java
  • Java中使用MySQL详解
    1. 简介 在Java开发中,与数据库的交互是常见且重要的一部分。MySQL是一个广泛使用的关系型数据库管理系统,而Java作为一种强大的编程语言,提供了丰富的API和工具,使得与MySQL数据库的结...
    99+
    2023-09-13
    java mysql 开发语言
  • Java中的==使用方法详解
    目录Java中的==2 字符串常量池3 总结Java中的== Java中的==表示的是什么呢?有时候很令人费解。比如,以下例子输出是什么? // 例一 String st...
    99+
    2024-04-02
  • 详解Java中Object 类的使用
    目录Object 类提供的方法方法实例clone() 方法equals() 方法finalize() 方法getClass() 方法hashCode() 方法wait() 方法not...
    99+
    2023-05-19
    Java Object 类使用 Java Object 类用法 Java Object 类
  • Java filter中的chain.doFilter使用详解
    目录filter中的chain.doFilter使用chain.doFilter作用举例说明Filter中chain.doFilter(req, res)的理解用法filter中的c...
    99+
    2024-04-02
  • java中Optional的使用详细解析
    目录Optional的使用详解1、Optional介绍2、构建Optional3、Optional API 及源码注解4、测试使用4.1、构建4.2、判断类4.3、获取类(常用)4....
    99+
    2024-04-02
  • Java中Pattern.compile函数的使用详解
    目录Java Pattern.compile函数的使用Pattern类的compile()方法还有另一个版本:flag来自以下Pattern类中的常量:我们可以通过“或”( | )操...
    99+
    2024-04-02
  • Java中jstat命令的使用详解
    目录jstat命令简介jstat命令参数输出选项-class选项-compiler选项-gc选项-gccapacity选项-gcutil选项-gccause选项-gcnew选项-gc...
    99+
    2024-04-02
  • Java中的jinfo命令使用详解
    目录jinfo命令简介jinfo命令参数-flag name-flag [+|-]name-flag name=value-flags-sysprops-h 和 -help结尾jin...
    99+
    2024-04-02
  • 详解Java中的mapstruct插件使用
    实体类的属性映射怎么可以少了它? 我们都知道,随着一个工程的越来越成熟,模块划分会越来越细,其中实体类一般存于 domain 之中,但 domain 工程最好不要被其他工程依赖,所以...
    99+
    2024-04-02
  • 详解Java中Quartz的简单使用
    目录简单示例usingJobData非并发执行Scheduler 每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题(jobDetail的实例也...
    99+
    2023-05-15
    Java Quartz使用 Java Quartz
  • 浅析java中asList的使用详解
    asList概述 Java中的asList方法是数组工具类 Arrays中的一个静态方法,Arrays.asList()方法的作用是将数组或一些元素转为集合,asList方法返回值...
    99+
    2024-04-02
  • Java中JDBC的使用教程详解
    目录概念快速入门步骤代码实现详解各个对象DriverManager:驱动管理对象Connection:数据库连接对象Statement:执行sql的对象ResultSet:结果集对象...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作