Java基础扫盲系列(-)—— String中的format
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的更多相关文章
- Java基础扫盲系列(三)— Java内省技术
前言 Java内省技术属于Java基础体系的的一部分,但是很多人都不甚了解.笔者也是在学习Spring源码的过程中遇到该技术模块的.为了完善技术体系,本文将全面的学习该技术.在提到Java内省技术,就 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- Java基础扫盲系列(二)—— Java中BigDecimal和浮点类型
一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecim ...
- java基础解析系列(九)---String不可变性分析
java基础解析系列(九)---String不可变性分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---In ...
- java基础解析系列(一)---String、StringBuffer、StringBuilder
java基础解析系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bu ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别
java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别 目录 java基础解析系列(一)---String.StringBuffer.St ...
- java基础解析系列(六)---深入注解原理及使用
java基础解析系列(六)---注解原理及使用 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---Integer ja ...
- java基础解析系列(七)---ThreadLocal原理分析
java基础解析系列(七)---ThreadLocal原理分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
随机推荐
- 在dockers中调试dump的dotnet程序
其他调试参考文章 centos7使用lldb调试netcore应用转储dump文件 centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试) 生成dump文件 如何在 ...
- Spark GraphX图计算核心算子实战【AggreagteMessage】
一.简介 参考博客:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package graphx import org.apache.log4j ...
- jqmobile FAQ
1. 用JavaScript弹出对话框 $("#msgBox").popup("open"); <div data-role="popup&qu ...
- bat 获取管理员权限,判断系统位数,获取当前文件所在目录,regsvr32注册DLL、OCX
1.获取管理员权限 @echo off if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%Syste ...
- Zabbix 添加内存告警
1.在Template OS Linux模板创建item Configuration-->Templates-->Template OS Linux-->items-->cre ...
- 第一部分day4-三次登录实验、字符编码
#-----三次登录实验----- memu = { "陕西":{ "西安市":{ "新城区":["大明宫遗址",&qu ...
- DVWA的搭建
DVWA的搭建 一.DVWA是什么? 一款渗透测试演练系统,俗称靶机. 二.如何搭建? Linux有成套的靶机,直接打开使用就可以,下面开始介绍Windows 下DVWA的搭建. 运行phpstudy ...
- 让istio中的jaeger跑起来
现在的水平,仅止于让它跑起来.:) 同样的环境,microk8s+istio. 步骤如下: 一,使用kubectl get pod -n istio-system查看所有istio的POD运行正常. ...
- Kth Minimum Clique(2019年牛客多校第二场D题+k小团+bitset)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 找第\(k\)小团. 思路 用\(bitset\)来标记每个结点与哪些结点直接有边,然后进行\(bfs\),在判断新加入的点与现在有的点是否都 ...
- emacs第一天
emacsbinw64.sourceforge.net windows的emacs下载地方(绿色软件) 学习快速入门 C-h t 快速入门的帮助文档 C-h 是prefix key 光标移动快捷键 ...