美文网首页程序那些事Java
JDK12的新特性:CompactNumberFormat

JDK12的新特性:CompactNumberFormat

作者: flydean程序那些事 | 来源:发表于2020-05-13 07:02 被阅读0次

简介

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

    简介 JDK12引入了新的格式化数字的类叫做CompactNumberFormat。主要方便我们对很长的数字进行简...

  • Java 12 Switch表达式学习

    关于JDK12新特性预览链接如下。 https://www.oschina.net/news/103411/jdk...

  • jdk12新特性

    要点 2019-03-19发布 主要是JVM、GC增强改进 新特性 JEP 189:Shenandoah:一个实验...

  • JDK12的新特性:teeing collectors

    简介 JDK12为java.util.stream.Collectors添加了一个新的teeing方法,怎么翻译呢...

  • JDK新特性书目录

    JDK1.4新特性 JDK1.5新特性 JDK1.6新特性 JDK1.7新特性 JDK1.8新特性

  • win10上安装jdk12

    说说我为什么要安装jdk12,因为我下载了STS之后,运行不了,报缺少JRE或JDK 下载jdk12 点击Java...

  • Java11的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java15的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java12的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Math方法和es新特性

    es6常用 es7新特性 es8新特性 es9新特性 es10新特性

网友评论

    本文标题:JDK12的新特性:CompactNumberFormat

    本文链接:https://www.haomeiwen.com/subject/aqrgnhtx.html