JDK12的新特性:CompactNumberFormat

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 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)

相关文章
|
2月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
45 3
|
1月前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
19 0
|
2月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
3月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
3月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
3月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
3月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
3月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
125 0
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
2月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
14 0
|
3月前
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化