Java基础扫盲系列(-)—— String中的format

以前大学学习C语言时,有函数printf,能够按照格式打印输出的内容。但是工作后使用Java,也没有遇到过格式打印的需求,今天遇到项目代码使用String.format()工具api。

这里完善知识体系,将Java中的formatter简单的总结下。

An interpreter for printf-style format strings. This class provides support for layout justification and alignment, common formats for numeric, string, and date/time data, and locale-specific output. Common Java types such as {@code byte}, {@link java.math.BigDecimal BigDecimal}, and {@link Calendar} are supported. Limited formatting customization for arbitrary user types is provided through the {@link Formattable} interface.

Java docs中是这样描述Formatter的:

格式化打印字符串的拦截器。Formatter提供对布局和对齐,格式化数值、字符串、日期时间和特定的本地化输出的能力。甚至连常用的BigDecimal,Calendar,byte类型都提供了支持。

先来看下简单的例子,认识下Formatter的格式能力:

int a = 1;
int b = 100; System.out.println(String.format("%03d", a));
System.out.println(String.format("%03d", b));

输出结果:

001
100

大致可以看出formatter的能力了吧。将参数按照设定的格式进行格式化。

Formatter是Java SE 5提供的api,就是为了对格式化提供支撑。常用的字符和数值类型的格式化语法如下:

%[argument_index$][flags][width][.precision]conversion

  • argument_index$可选参数,用来按照位置指定参数,1$表示第一个参数;
  • flags是可选参数,是一个字符集用来控制输出格式,依赖后面的转换conversion;
  • width可选参数,是一个非负的整型,用来控制输出的字符个数;
  • precision可选参数,是一个非负整型,用来控制小数点后的个数;
  • conversion必选,是一个字符,用来表示参数怎样被格式化;

对于各个参数想详细信息和日期时间,甚至其功能的格式化(大小写转换),请参考api文档: Class Formatter

在Java字节的类库中也有大量使用Formatter的痕迹:

  • String类提供的静态api

      public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
    }
  • System.out.printf():

      public PrintStream printf(String format, Object ... args) {
    return format(format, args);
    } public PrintStream format(String format, Object ... args) {
    try {
    synchronized (this) {
    ensureOpen();
    if ((formatter == null)
    || (formatter.locale() != Locale.getDefault()))
    formatter = new Formatter((Appendable) this);
    formatter.format(Locale.getDefault(), format, args);
    }
    } catch (InterruptedIOException x) {
    Thread.currentThread().interrupt();
    } catch (IOException x) {
    trouble = true;
    }
    return this;
    }

这些地方都是对Formatter的格式化能力包装后提供的简洁api。

Java基础扫盲系列(-)—— String中的format的更多相关文章

  1. Java基础扫盲系列(三)— Java内省技术

    前言 Java内省技术属于Java基础体系的的一部分,但是很多人都不甚了解.笔者也是在学习Spring源码的过程中遇到该技术模块的.为了完善技术体系,本文将全面的学习该技术.在提到Java内省技术,就 ...

  2. Java基础知识系列——String

    最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...

  3. Java基础扫盲系列(二)—— Java中BigDecimal和浮点类型

    一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecim ...

  4. java基础解析系列(九)---String不可变性分析

    java基础解析系列(九)---String不可变性分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---In ...

  5. java基础解析系列(一)---String、StringBuffer、StringBuilder

    java基础解析系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bu ...

  6. java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现

    java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...

  7. java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别

    java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别 目录 java基础解析系列(一)---String.StringBuffer.St ...

  8. java基础解析系列(六)---深入注解原理及使用

    java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...

  9. java基础解析系列(七)---ThreadLocal原理分析

    java基础解析系列(七)---ThreadLocal原理分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

随机推荐

  1. 达梦DCI

    /************************************************************************/ /* DCI编程实例 */ /********** ...

  2. 锁、分布式锁、无锁实战全局性ID

    1.为什么要使用锁 当发生并发时,会产生多线程争夺一个资源,为保证资源的唯一性. JVM锁:对象锁,死锁,重入锁,公平锁,偏向锁 分布式锁:数据库 nosql .zookeeper 面试题:如何排查死 ...

  3. Spring Cloud 微服务实战笔记

    Spring Cloud 微服务实战笔记 微服务知识 传统开发所有业务逻辑都在一个应用中, 开发,测试,部署随着需求增加会不断为单个项目增加不同业务模块:前端展现也不局限于html视图模板的形式,后端 ...

  4. MSSQL记录表字段数据变化的相关SQl

    在软件实施过程中,也许会有这样的问题: 表中数据出现非预期的结果,此时不确定是程序问题,哪个程序,存储过程,触发器.. 或还是人为修改的结果,此时可以用触发器对特定的表字段做跟踪监视,记录每次新增,修 ...

  5. PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件

    PHP  多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用:http://fex.baidu.com/webuploader/gett ...

  6. 十九、Python之socket编程

    socket(套接字)就是建立连接,发送,接收.大部分网络协议都是建立在socket之上的,例如:http,ftp,smtp等等     socket用于描述IP地址和端口,是一个通信链的句柄.应用程 ...

  7. 安装Visual Studio 时窗口闪过就退出

    双击安装文件,窗口闪了下就退出了. 解决方法:控制面板 ———程序——程序和功能——打开或关闭Windows功能——关闭NET相关框架. 然后再次安装即可. 参考文献:   VS安装程序一闪而过

  8. 201871010123-吴丽丽《面向对象程序设计(Java)》第四周学习总结

    201871010123-吴丽丽<面向对象程序设计(Java)>第四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  9. 201671010449 杨天超 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 作业学习目标 1.掌握软件评审流程及内容 2.个人总结 实验一问题解答 实验一问题链接:https://ww ...

  10. 20180610模拟赛T1——脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...