再探Java基础——String.format(String format, Object… args)的使用
最近看到类似这样的一些代码:String.format("参数%s不能为空", "birthday"); 以前还没用过这功能不知咐意思,后研究了一下,详细讲解如下。
public static String format(String format, Object... args)的功能非常强大,用法非常灵活。主要的意思是返回指定的格式化的字符串。Format参数为格式字符串语法如下:
%[argument_index$][flags][width][.precision]conversion
“[]”里的参数表示可选。
可选的 argument_index :下标是一个十进制整数,用于表明参数在参数列表中的位置。
可选的 flags 标志是修改输出格式的字符集。有效标志的集合取决于转换类型。
可选 width 最小宽度是一个非负十进制整数,表明要向输出中写入的最少字符数。
可选 precision 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。
所需的 conversion转换方式是一个表明应该如何格式化参数的字符。给定参数的有效转换集合取决于参数的数据类型。
上面解释比较枯燥,代码举例如下;
Eg1:说明argument_index和width
System.out.println(msg);
String s = String.format("this is a %2$s %1$s %s %s test", "java", "C++");
this is a C++ java java C++ test
Eg2.说明 flags
System.out.println(String.format("%1$,09d", -3872));
System.out.println(String.format("%1$,010d", -3872));
System.out.println(String.format("%1$,09d", 3872));
System.out.println(String.format("%1$9d", -14));
System.out.println(String.format("%1$-9d", -14));
System.out.println(String.format("%1$(9d", -14));
System.out.println(String.format("%1$#9x", 31));
结果:
-0003,872
-00003,872
00003,872
-14
-14
(14)
0x1f
下表总结了受支持的标志。y 表示该标志受指示参数类型支持。
|
标志 |
常规 |
字符 |
整数 |
浮点 |
日期/时间 |
说明 |
|
'-' |
y |
y |
y |
y |
y |
结果将是左对齐的。 |
|
'#' |
y1 |
- |
y3 |
y |
- |
结果应该使用依赖于转换类型的替换形式 |
|
'+' |
- |
- |
y4 |
y |
- |
结果总是包括一个符号 |
|
' ' |
- |
- |
y4 |
y |
- |
对于正值,结果中将包括一个前导空格 |
|
'0' |
- |
- |
y |
y |
- |
结果将用零来填充 |
|
',' |
- |
- |
y2 |
y5 |
- |
结果将包括特定于语言环境的组分隔符 |
|
'(' |
- |
- |
y4 |
y5 |
- |
结果将是用圆括号括起来的负数 |
Eg3:说明conversion
System.out.println(String.format("this is:%s %s", "string", "format"));
System.out.println(String.format("%b, %b, %b, %b, %b, %b", "true",true, false, null, 0>1, 1, ""));
System.out.println(String.format("%o", 31));
System.out.println(String.format("%x", 31));
System.out.println(String.format("%e", 12345.6987));
System.out.println(String.format("%a", 12345.6987));
System.out.println(String.format("%c, %c, %c, %c", 'a', 'b', 48, 98));
结果:
this is:string format
true, true, false, false, false, true
37
1f
1.234570e+04
0x1.81cd96f0068dcp13
a, b, 0, b
标志的说明:
|
转换 |
参数类别 |
说明 |
|
'b', 'B' |
常规 |
如果参数 arg 为 null,则结果为 "false"。如果 arg 是一个 boolean 值或 Boolean,则结果为 String.valueOf() 返回的字符串。否则结果为 "true"。 |
|
'h', 'H' |
常规 |
如果参数 arg 为 null,则结果为 "null"。否则,结果为调用 Integer.toHexString(arg.hashCode()) 得到的结果。 |
|
's', 'S' |
常规 |
如果参数 arg 为 null,则结果为 "null"。如果 arg 实现 Formattable,则调用 arg.formatTo。否则,结果为调用 arg.toString() 得到的结果。 |
|
'c', 'C' |
字符 |
结果是一个 Unicode 字符 |
|
'd' |
整数 |
结果被格式化为十进制整数 |
|
'o' |
整数 |
结果被格式化为八进制整数 |
|
'x', 'X' |
整数 |
结果被格式化为十六进制整数 |
|
'e', 'E' |
浮点 |
结果被格式化为用计算机科学记数法表示的十进制数 |
|
'f' |
浮点 |
结果被格式化为十进制数 |
|
'g', 'G' |
浮点 |
根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。 |
|
'a', 'A' |
浮点 |
结果被格式化为带有效位数和指数的十六进制浮点数 |
|
't', 'T' |
日期/时间 |
日期和时间转换字符的前缀。请参阅日期/时间转换。 |
|
'%' |
百分比 |
结果为字面值 '%' ('\u0025') |
|
'n' |
行分隔符 |
结果为特定于平台的行分隔符 |
String msg = String.format("参数%s不能为空", "birthday");
System.out.println(msg);
Eg4:格式化日期
Calendar c = Calendar.getInstance();
String data_str = String.format("today is: %1$tY/%1$tm/%1$te, now time is %1$tH:%1$tM:%1$tS", c);
结果:
today is: 2013/10/31, now time is 17:36:49
日期类标志的说明:
以下日期和时间转换字符后缀是为 't' 和 'T' 转换定义的。这些类型类似于但不完全等同于 GNU date 和 POSIX strftime(3c) 定义的那些类型。提供其他转换类型是为了访问特定于Java 的功能(例如,'L' 用于秒中的毫秒)。
以下转换字符用来格式化时间:
|
'H' |
'\u0048' |
24 小时制的小时,被格式化为必要时带前导零的两位数,即 00 - 23。00 对应午夜。 |
|
'I' |
'\u0049' |
12 小时制的小时,被格式化为必要时带前导零的两位数,即 01 - 12。01 对应于 1 点钟(上午或下午)。 |
|
'k' |
'\u006b' |
24 小时制的小时,即 0 - 23。0 对应于午夜。 |
|
'l' |
'\u006c' |
12 小时制的小时,即 1 - 12。1 对应于上午或下午的一点钟。 |
|
'M' |
'\u004d' |
小时中的分钟,被格式化为必要时带前导零的两位数,即 00 - 59。 |
|
'S' |
'\u0053' |
分钟中的秒,被格式化为必要时带前导零的两位数,即 00 - 60("60" 是支持闰秒所需的一个特殊值)。 |
|
'L' |
'\u004c' |
秒中的毫秒,被格式化为必要时带前导零的三位数,即 000 - 999。 |
|
'N' |
'\u004e' |
秒中的毫微秒,被格式化为必要时带前导零的九位数,即 000000000 - 999999999。此值的精度受基础操作系统或硬件分析的限制。 |
|
'p' |
'\u0070' |
特定于语言环境的上午或下午标记以小写形式表示,例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。(注意,'p' 产生的输出是小写的。而GNU date 和 POSIX strftime(3c) 产生的输出是大写的。) |
|
'z' |
'\u007a' |
相对于 GMT 的 RFC 822 格式的数字时区偏移量,例如 -0800。 |
|
'Z' |
'\u005a' |
表示时区的缩写形式的字符串。 |
|
's' |
'\u0073' |
自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数,也就是 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。 |
|
'Q' |
'\u004f' |
自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数,即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。此值的精度受基础操作系统或硬件分析的限制。 |
以下转换字符用来格式化日期:
|
'B' |
'\u0042' |
特定于语言环境的完整月份名称,例如 "January" 和 "February"。 |
|
'b' |
'\u0062' |
特定于语言环境的月份简称,例如 "Jan" 和 "Feb"。 |
|
'h' |
'\u0068' |
与 'b' 相同。 |
|
'A' |
'\u0041' |
特定于语言环境的星期几的全称,例如 "Sunday" 和 "Monday" |
|
'a' |
'\u0061' |
特定于语言环境的星期几的简称,例如 "Sun" 和 "Mon" |
|
'C' |
'\u0043' |
除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数,即 00 - 99 |
|
'Y' |
'\u0059' |
年份,被格式化为必要时带前导零的四位数(至少),例如 0092 等于格里高利历的 92 CE。 |
|
'y' |
'\u0079' |
年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99。 |
|
'j' |
'\u006a' |
一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366。001 对应于一年中的第一天。 |
|
'm' |
'\u006d' |
月份,被格式化为必要时带前导零的两位数,即 01 - 13,其中 "01" 是一年的第一个月,("13" 是支持阴历所需的一个特殊值)。 |
|
'd' |
'\u0064' |
一个月中的天数,被格式化为必要时带前导零的两位数,即 01 - 31,其中 "01" 是一个月的第一天。 |
|
'e' |
'\u0065' |
一个月中的天数,被格式化为两位数,即 1 - 31,其中 "1" 是一个月中的第一天。 |
以下转换字符用于格式化常见的日期/时间组合。
|
'R' |
'\u0052' |
24 小时制的时间,被格式化为 "%tH:%tM" |
|
'T' |
'\u0054' |
24 小时制的时间,被格式化为 "%tH:%tM:%tS"。 |
|
'r' |
'\u0072' |
12 小时制的时间,被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与地区有关。 |
|
'D' |
'\u0044' |
日期,被格式化为 "%tm/%td/%ty"。 |
|
'F' |
'\u0046' |
ISO 8601 格式的完整日期,被格式化为 "%tY-%tm-%td"。 |
|
'c' |
'\u0063' |
日期和时间,被格式化为 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。 |
具体的自个再看文档去吧!
再探Java基础——String.format(String format, Object… args)的使用的更多相关文章
- 再探java基础——break和continue的用法
再探java基础——break和continue的用法 break break可用于循环和switch...case...语句中. 用于switch...case中: 执行完满足case条件的内容内后 ...
- 再探Java基础——throw与throws
http://blog.csdn.net/luoweifu/article/details/10721543 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待 ...
- 再探java基础——对面向对象的理解(2)
对象.类和抽象类的区别 对象是一个具体的事物,类是对具有相同属性和行为的一组对象的抽象,对象是类的一个一个人的具体实例:抽象类是一种特殊的类,是对类的进一步抽象,抽象类不能被实例化. 类.抽象类和接口 ...
- 再探java基础——零碎基础知识整理
1.java是解释型语言.java虚拟机能实现一次编译多次运行. 2.JDK(java software Development kit 软件开发包),JRE(java Runtime Environ ...
- 再探java基础——对面向对象的理解(1)
对象 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则.计划或事件.对象具有属性和行为,在程序设计中对象实现了数据和操作的结合,使数 ...
- [转] 再探java基础——break和continue的用法
原文地址:http://blog.csdn.net/luoweifu/article/details/10756017 break break可用于循环和switch...case...语句中. 用于 ...
- Java基础-字符串(String)常用方法
Java基础-字符串(String)常用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java的API概念 Java的API(API:Application(应用) Pr ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
主函数类MainDemo.java package com.itcast.test20140109; import java.util.ArrayList; import java.util.Coll ...
随机推荐
- 卸载mysql时,如何卸载干净!
相信很多朋友在使用mysql的过程中都会遇到这样的问题,安装过程出错,或者想要换个版本,或者不想使用了,这个时候我们都需要完全卸载mysql呢?下面,就来谈一谈我的经验. 1.控制面板——>所有 ...
- protobuf的反射机制
反射机制 java在运行状态时,能够知道任意类的所有属性和方法,都能够调用任意对象的任意方法和属性.这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. C++本身没有反射机制. ...
- 10 款强大的JavaScript图表图形插件推荐
转自:http://www.iteye.com/news/24535 网上有很多用于绘制图表图形的免费JavaScript插件和图表库,这类插件大量出现的原因,一是人们不再依赖于Flash,二是浏览器 ...
- ThinkPHP 发送post请求
function post($url, $param=array()){ if(!is_array($param)){ throw new Exception("参数必须为array&quo ...
- thinkphp的nginx配置
thinkphp的nginx配置 server { listen 80; server_name www.abc.com; #charset utf-8; access_log /var/www/ww ...
- JS indexOf() lastIndexOf()与substring()截取字符串的区别
1. String.IndexOf 方法 (value[,startIndex]) value:要查找的 Unicode 字符. 必选项startIndex:搜索起始位置. 可选项 不写从开头查找 ...
- js 刷新页面大全
一.先来看一个简单的例子: 下面以三个页面分别命名为frame.html.top.html.bottom.html为例来具体说明如何做. frame.html 由上(top.html)下(bottom ...
- Kafka 集群消息监控系统:Kafka Eagle
Kafka Eagle 1.概述 在开发工作当中,消费 Kafka 集群中的消息时,数据的变动是我们所关心的,当业务并不复杂的前提下,我们可以使用 Kafka 提供的命令工具,配合 Zookeeper ...
- CSS中.和#区别
一.问题来源 制作导航栏,参考别人的代码,发现的. 二.解析 2.1 概述 id:用来定义页面中大的样式,如栏目划分,顶部,正文,底部等:用#top的形式来定义: class:用来定义一些比较细节的样 ...
- H.264 Quantization
H.264 Quantizer 一般的量化器,可用下面的公式来表示: $Z=\pm \left \lfloor\frac{ \left | W \right | }{\bigtriangleup }\ ...