再探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 ...
随机推荐
- bc命令详解与实例
bc: bc 是一种高精度的可交互执行的计算机语言.它在一些浮点数的运算中应用广泛. 一般情况下我们直接输入 bc ,便可进入其工作环境.当然,它还有其他的参数 -h 显示帮助信息并退出 -i 强制进 ...
- [Git]Git远程仓库
1.创建ssh key 查看主目录下面 C:\Users\Administrator\.ssh 是否存在 id_rsa 和 id_rsa.pub 文件,如果不存在需要generate new key. ...
- jquery 当前页导航高亮显示
<script type="text/javascript"> $(document).ready(function(){ var myNav = $("#n ...
- 求数列的和 AC 杭电
求数列的和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu 4548 第六周H题(美素数)
第六周H题 - 数论,晒素数 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- Nginx系列~概念与windows下环境搭建
概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sys ...
- 转:ElasticSearch 插件安装
原文来自于:http://www.07net01.com/linux/Elasticsearch_chajiananzhuang_21257_1350993328.html 进入elasticsear ...
- 转:WebSocket与Java
Bozhidar Bozhanov是Ontotext AD的高级软件工程师,拥有多年的从业经验,也是stackoverflow上的活跃用户.他精通于Java与Java技术栈,如Spring.JPA.J ...
- SIM卡读卡器的研究与设计
SIM卡(Subscriber Identity Module).即用户识别模块,是一张符合GSM规范的"智慧卡".SIM卡可以插入任何一部符合GSM规范的移动电话中," ...
- 关于如何在C语言中嵌入汇编命令
转载自:http://www.keil.com/support/docs/2308.htm C51: GETTING INLINE ASSEMBLY TO WORK Information in th ...