JDK12的新特性:CompactNumberFormat
JDK12的新特性:CompactNumberFormat
简介
JDK12引入了新的格式化数字的类叫做CompactNumberFormat。主要方便我们对很长的数字进行简写。比如1000可以简写为1K或者1 thousand。
本文将会讲解CompactNumberFormat的基本构成和使用方法,最后在实际的例子中结束文章的讲解。
更多内容请访问www.flydean.com
CompactNumberFormat详解
CompactNumberFormat做为格式化数字的一部分是NumberFormat的子类。作用就是将数字进行格式化。要想构建一个CompactNumberFormat,最简单的办法就是使用NumberFormat.getCompactNumberInstance方法了。
下面是该方法的定义:
public static NumberFormat getCompactNumberInstance(Locale locale,
NumberFormat.Style formatStyle)
方法需要传入两个参数:Locale和Style。
Locale
Locale代表着本地语言特性,比如在US locale中,10000可以表示为“10K”,而在China locale中,10000中就变成了“1万”。
Style
Style有两种类型,short和long。比如说10000的short表示是“10K”,而它的long表示是“10 thousand”。
JDK已经为我们自定义了很多种内置的Compact实现,我们可以直接使用:
@Test
public void testCompactNumberFormat(){
NumberFormat fmtShort = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.SHORT);
NumberFormat fmtLong = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.LONG);
log.info(fmtShort.format(312));
log.info(fmtShort.format(3123));
log.info(fmtShort.format(31234));
log.info(fmtLong.format(312));
log.info(fmtLong.format(3123));
log.info(fmtLong.format(31234));
}
输出结果:
312
3K
31K
312
3 thousand
31 thousand
自定义CompactNumberFormat
除了使用NumberFormat工具类之外,我们还可以自定义CompactNumberFormat。
先看下CompactNumberFormat的定义:
public CompactNumberFormat(String decimalPattern,
DecimalFormatSymbols symbols, String[] compactPatterns)
public CompactNumberFormat(String decimalPattern,
DecimalFormatSymbols symbols, String[] compactPatterns,
String pluralRules)
CompactNumberFormat可以接受3个或者4个参数的构造函数。
其中decimalPattern和symbols是用来正常解析数字的,compactPatterns则是用来生成缩写。pluralRules表示的是复数规则。
@Test
public void useCustom(){
String[] compactPatterns
= {"", "", "", "0千", "0万", "00万", "0百万", "0千万", "0亿",
"00亿", "0百亿", "0千亿", "0兆", "00兆", "000兆"};
DecimalFormat decimalFormat = (DecimalFormat)
NumberFormat.getNumberInstance(Locale.CHINA);
CompactNumberFormat format
= new CompactNumberFormat( decimalFormat.toPattern(),
decimalFormat.getDecimalFormatSymbols(),
compactPatterns);
log.info(format.format(312340000));
}
上面是一个我们自定义的缩写规则。
输出结果:
3亿
解析CompactNumber
能生成自然也能够解析,我们看一个解析的例子:
@Test
public void testParse() throws ParseException {
NumberFormat fmtLong = NumberFormat.getCompactNumberInstance(
Locale.US, NumberFormat.Style.LONG);
log.info(String.valueOf(fmtLong.parse("3 thousand")));
}
输出结果:
3000
总结
本文介绍了JDK12中引入的新的CompactNumberFormat类,希望大家能够喜欢。
本文的例子[https://github.com/ddean2009/
learn-java-base-9-to-20](https://github.com/ddean2009/
learn-java-base-9-to-20)
本文作者:flydean程序那些事
本文链接:http://www.flydean.com/jdk12-compactnumberformat/
本文来源:flydean的博客
欢迎关注我的公众号:程序那些事,更多精彩等着您!
JDK12的新特性:CompactNumberFormat的更多相关文章
- JDK10、JDK11、JDK12新特性
JDK10新特性 1.var声明变量 很多人抱怨Java是一种强类型,需要引入大量的样板代码.甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的.许多流行的编程语言 ...
- JDK12的五大重要新特性
文章目录 JDK12的五大重要新特性 引入JVM常量API 扩展了switch语句 支持Unicode 11.0 为日本Reiwa Era提供了方形字符支持 NumberFormat增加了对以紧凑格式 ...
- jdk11新特性
JDK 11主要特性一览 jdk11即将在9月25号发布正式版.确定的新特性包括以下17个 181 嵌套类可见性控制 309 动态文件常量 315 改进 Aarch64 Intrinsics 318 ...
- Java12新特性 -- 增强G1,自动返回未用堆内存给操作系统
Java 12 中增强了 G1 垃圾收集器关于混合收集集合的处理策略,这节主要介绍在 Java 12 中同时也对 G1垃圾回收器进行了改进,使其能够在空闲时自动将 Java 堆内存返还给操作系统,这也 ...
- JDK14发布了,快来看看有什么新特性吧
序言
- 一文带你看遍 JDK9~14 的重要新特性!
Java9 发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如 ...
- 从Java 9 到 Java 17 新特性梳理
Java 9 新的创建集合的方法 // [1, 2, 3, 4] List<Integer> integers = List.of(1, 2, 3, 4); // {1,2,3} ...
- JDK8到JDK17有哪些吸引人的新特性?
作者:京东零售 刘一达 前言 2006年之后SUN公司决定将JDK进行开源,从此成立了OpenJDK组织进行JDK代码管理.任何人都可以获取该源码,并通过源码构建一个发行版发布到网络上.但是需要一个组 ...
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
随机推荐
- 如何使用 perf 分析 splice 中 pipe 的容量变化
如何使用 perf 分析 splice 中 pipe 的容量变化 这个文章为了填上一篇文章的坑的,跟踪内核函数本来是准备使用 ebpf 的,但是涉及到了低内核版本,只能使用 kprobe 了. 恰好, ...
- Java 方法的重载(overload)
1 /* 2 * 3 * 方法的重载(overload) 4 * 1.定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数个数或者参数类型不同 5 * 6 * "两同一不同&quo ...
- Java //9*9乘法表 乘法口诀
1 //9*9乘法表 2 3 for(int i =1;i<10;i++) 4 { 5 for(int j = 1;j <=i;j++) 6 { 7 System.out.print(i+ ...
- 适用于AbpBoilerplate的RocketChat Api库
RocketChat 适用于AbpBoilerplate的RocketChat Api库 Rocket.Chat 是一个免费.开源.可扩展.高度可定制且安全的平台,可让您与团队进行交流和协作.共享文件 ...
- Linux安装Nginx详细教程
一.下载Nginx安装包 Nginx官网下载地址 根据需求选择自己需要的版本下载后上传至服务器(路径自行决定). 如果服务器有外网,可以直接在服务器上下载. wget -c https://nginx ...
- 后端基础PHP—PHP表单验证
后端基础PHP-PHP表单验证 1.PHP表单 2.PHP连接MySQL 一.PHP表单介绍 关于表单 PHP表单,在网页中主要负责采集数据 通俗理解,在银行办业务需要填一张纸质的表,需要向表上填信息 ...
- terminate called after throwing an instance of 'std::regex_error'(C++11)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Garnet发布 Redis不再是唯一选择
Garnet 是 Microsoft Research 的远程缓存存储,提供强大的性能(吞吐量和延迟).可扩展性.存储.恢复.集群分片.密钥迁移和复制功能. Garnet 可以与现有的 Redis 客 ...
- Linux快速入门(二)Linux基础操作
绝对路径和相对路径 Linux中绝对路径指从根目录开始,即/目录. 相对路径是指相对于当前路径开始,即./ 目录,../表示上一级目录路径. pwd pwd命令用于查看当前所在目录. gubeiqin ...
- BugkuCTF-游戏过关
首先将exe文件下载下来,打开看一下: 玩游戏 n是灯的序列号,m是灯的状态 如果第n盏灯的m是1,它就开,如果不是,它就关 起初所有的灯都关上了 现在你可以输入n来改变它的状态 但是你应该注意一件事 ...