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 ...
随机推荐
- 【华为机试ACM基础#01】字符串最后一个单词长度、计算某字符出现次数、提取不重复的整数(熟悉字符/字符串/整数的输入)
字符串最后一个单词的长度 描述 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000.(注:字符串末尾不以空格为结尾) 输入描述: 输入一行,代表要计算的字符串,非空,长度小于5000 ...
- ZYNQ核心板及其底板开源啦!
Hello-FPGA ZYNQ 设计开源啦! 开源ZYNQ核心板 + 底板 硬件设计.软件设计,软件设计使用裸机演示,演示了如何使用AXI DMA等关键dma 模块 欢迎加QQ 讨论 94755958 ...
- github.com/json-iterator/go 详细教程
最近接触到了 github.com/json-iterator/go , 是由滴滴开源的第三方json编码库,它同时提供Go和Java两个版本. 文中大量内容来自 github 上的 wiki 文档, ...
- python中json.dumps() 与json.dump(),json.load()与json.loads()区别?
json.dumps() 将 Python 对象转换为 JSON 字符串,并返回该字符串.而 json.dump() 将 Python 对象转换为 JSON 字符串,并将该字符串写入文件. json. ...
- SQLServer 导入 Excel 表数据报错“文本被截断。。。”
报错详情(关键信息就是:文本被截断) 错误 0xc020901c: 数据流任务 1: 输出"Excel 源输出"(9) 上的 输出列"xxxxx"(78) 出错 ...
- 《Relation of the Relations A New Paradigm of the Relation Extraction Problem》论文阅读笔记
原文 代码 摘要 为了解决传统的关系抽取(RE)方法只能识别两个实体之间的关系,而忽略了同一上下文中多个关系之间的相互依赖性,即关系的关系(relation of relations,RoR)的问题, ...
- XAF Blazor FilterPanel 布局样式
从上一篇关于ListView布局样式的文章中,我们知道XAFBlazor是移动优先的,如果想在PC端有更好的用户体验,我们需要对布局样式进行修改.这篇介绍在之前文章中提到的FilterPanel,它的 ...
- snippet n. 小片, 片断, 摘录 单词记忆
snippet 助记:snip[剪断] + -et小词后缀. 关键是 snip 怎么记忆 snip : 拟声词,模仿剪断东西的声音. 助记单词 slip 滑 根据字母 n是done的缩写,可以 想成 ...
- Windows改变终端字体后,终端一片黑 的解决办法
使用Windows终端的时候总觉得字体不好看,于是乎按照网上的教程改了一下 注册表 计算机\HKEY_CURRENT_USER\Console%SystemRoot%_system32_cmd.exe ...
- 二进制文件分析工具-hexdump使用指南
一 概念: hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII.八进制.十进制.十六进制 格式进行 查看. 二 用法简介: 该工具的用法十分简单,具体如下所示: ...