`
brandNewUser
  • 浏览: 446393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

String.format(String format, Object… args)总结

阅读更多

JDK1.5中,String类新增了一个很有用的静态方法String.format,这个方法可以简化字符串的输出工作,避免在System.out.println方法和记录Log时代码中出现大量的字符串连接符“+”这种丑陋的代码书写方式,使用指定的格式字符串和参数返回一个格式化字符串,而在System.out.printf方法中也使用了format这种方式输出至console中。

 

java中的String.format函数有些类似c语言中printf函数,一些格式字符串与C类似,方法中提供了对布局对齐和排列的支持,以及对数值、字符串和日期/时间数据的常规格式和特定于语言环境的输出的支持。

 

 

1.   整数类型

%[index$][标识][最小宽度]转换方式

注:其中[]中表示非必需可选项 

 

index表示参数在参数列表(可变参数args)中的位置,位置从1开始,以此类推;

几种常用的标识如下:

标识符

含义

‘-‘

最小宽度内左对齐,不可以与’0’一起使用

‘#’

只能用在8进制和16进制,8进制在结果前加一个016进制前面加0x

‘+’

结果总是包含一个符号,一般用于10进制

‘ ‘(空格)

正值前加空格,负值前加-,一般用于10进制

‘0’

结果用左边0填充

‘,’

3位用,分隔,用于10进制

‘(‘

参数为负数时,结果中不添加负号,使用()把数字括起来

 

最小宽度表示向输出中写入的最少字符数,如果实际字符数超过该字符数,继续显示;

转换方式:d-十进制,o-八进制,xX-十六进制。

 

实例代码如下:

 

System.out.println(String.format("%1$010d", -19999));   //expect "-000019999"
System.out.println(String.format("%1$,010d", -19999));   //expect "-00019,999"
System.out.println(String.format("%1$ 10d", -19999));   //expect "    -19999"
System.out.println(String.format("%1$,(10d", -19999));   //expect "  (19,999)"
System.out.println(String.format("%1$#15x", -19999));   //expect "     0xffffb1e1"

  

 

2.   浮点数类型

%[index$][标识][最小宽度][.精度]转换方式

index不再赘述;

标识与整数类型大体类似,只是使用场景(转换方式)稍微有所不同:

标识符

含义

‘-‘

在最小宽度内左对齐,不可以与’0’同时使用

‘+’

结果总是包括一个符号

‘ ’(空格)

正值前加空格,负值前加负号

‘0’

结果用左边0填充

‘,’

3位数字之间用“,”分隔(只用于fgG的转换)

‘(’

若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(只适用于eEfgG的转换)

精度用于控制小数点后面的位数,如果不设置,ms6位;

转换方式:

'e', 'E'

结果被格式化为用计算机科学记数法表示的十进制数

'f'

结果被格式化为十进制普通表示方式

'g', 'G'

根据具体情况,自动选择用普通表示方式还是科学计数法方式(暂不知道其如何选择)

'a', 'A'

结果被格式化为带有效位数和指数的十六进制浮点数(这个就更没看懂了)

 

 

实例代码如下:

System.out.println(String.format("%1$(15e", -19999.0));   //expect "  (1.999900e+04)"
System.out.println(String.format("%1$(15f", -19999.0));   //expect " (19999.000000)"
System.out.println(String.format("%1$015f", -19999.0));   //expect "-0019999.000000"
System.out.println(String.format("%1$0+15.4f", 19999.01));   //expect "+000019999.0100"
System.out.println(String.format("%1$0+15.4g", 19999.01));   //expect "+000002.000e+04"
System.out.println(String.format("%1$0+15.4a", 19999.01));   //expect "+0x00001.387cp14"

  

3.   日期类型

日期和时间转换的后缀字符是为 't' 'T',在format中使用日期类型进行转换,可以避免沿用原有的SimpleDateFormat进行转换(比较繁琐),优雅地解决将Date类型输出成对应的字符串表示。

 

 

参数

含义

'B'

特定于语言环境的月份全称,例如 "January" "February"

'b'/'h'

特定于语言环境的月份简称,例如 "Jan" "Feb"

'A'

特定于语言环境的星期几全称,例如 "Sunday" "Monday"

'a'

特定于语言环境的星期几简称,例如 "Sun" "Mon"

'C'

除以100的四位数表示的年份,被格式化为必要时带前导零的两位数,即00 - 99

'Y'

年份,被格式化为必要时带前导零的四位数(至少),例如,0092 等于格里高利历的 92 CE

'y'

年份的最后两位数,被格式化为必要时带前导零的两位数,即 00 - 99

'j'

一年中的天数,被格式化为必要时带前导零的三位数,例如,对于格里高利历是 001 - 366

'm'

月份,被格式化为必要时带前导零的两位数,即01 - 13

'd'

一个月中的天数,被格式化为必要时带前导零两位数,即 01 - 31

'e'

一个月中的天数,被格式化为两位数,即 1 - 31

'H'

24小时制的小时,被格式化为必要时带前导零的两位数,即00-23

'I'

12小时制的小时,被格式化为必要时带前导零的两位数,即01-12

'k'

24小时制的小时,即0 - 23

'M'

小时中的分钟,被格式化为必要时带前导零的两位数,即00-59

'S'

分钟中的秒,被格式化为必要时带前导零的两位数,即00-60"60" 是支持闰秒所需的一个特殊值)

'L'

秒中的毫秒,被格式化为必要时带前导零的三位数,即000-999

'N'

秒中的毫微秒,被格式化为必要时带前导零的九位数,即000000000 – 999999999

'p' 

特定于语言环境的上午或下午标记以小写形式表示,例如 "am" "pm"。使用转换前缀'T'可以强行将此输出转换为大写形式

'z'

相对于GMTRFC 822格式的数字时区偏移量,例如-0800

'Z'

表示时区缩写形式的字符串。Formatter的语言环境将取代参数的语言环境

's'

自协调世界时 (UTC) 1970 1 1 00:00:00 至现在所经过的秒数,即 Long.MIN_VALUE/1000 Long.MAX_VALUE/1000 之间的差值

'Q'

自协调世界时 (UTC) 1970 1 1 00:00:00 至现在所经过的毫秒数,即 Long.MIN_VALUE Long.MAX_VALUE 之间的差值

 

 

Calendar.getInstance().set(2014, 6, 6, 12, 05);
Date date = Calendar.getInstance().getTime();
System.out.println(String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS", date));   //expect "2014-06-06 11:41:00"

  

如果每次都是单个年份和月份的组合,format中也是比较大的工作量,因此,系统中提供了格式化日期中比较常用的日期/时间组合:

组合参数

含义

'R'

24 小时制的时间,被格式化为"%tH:%tM"

'T'

24 小时制的时间,被格式化为 "%tH:%tM:%tS"

'r'

12 小时制的时间,被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关

'D'

日期,被格式化为 "%tm/%td/%ty"

'F'

ISO 8601 格式的完整日期,被格式化为 "%tY-%tm-%td"

'c'

日期和时间,被格式化为 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"

 

 

System.out.println(String.format("%tD", date));   //expect "06/06/14"
System.out.println(String.format("%tc", date));   //expect "星期五 六月 06 11:44:53 CST 2014"
System.out.println(String.format("%tF", date));   //expect "2014-06-06"

 

其他

  • %format中用于控制转换方式,属于特殊字符,但是如果想要在其中输出%,使用两个%%
  • %n用于取得平台独立的行分隔符,与System.getProperty(“line.separator”)一致;
  • 对字符(character)进行格式化比较简单,使用转换符号c即可,也仅提供了一种标识’-‘(左对齐)
  • 默认情况下,可以不设置[index$],这样就按照参数出现的顺序进行匹配,此时如果参数的个数比在format字符串出现的少,直接抛异常;比format字符串出现的多,取前面匹配的值,忽略后续没有使用的值。

 

分享到:
评论

相关推荐

    js中的string.format函数代码

    源于C#中的string.Format() 代码如下: String.prototype.format = function(args) { if (arguments.length>0) { var result = this; if (arguments.length == 1 && typeof (args) == “object”) { for (var key in ...

    asp.net 文件夸域名传输带进度条

    protected void Page_Load(object sender, EventArgs args) { if (this.IsPostBack) { uploadInfo = this.Session["UploadInfo"] as UploadInfo; if (uploadInfo == null) { // 让父页面知道无法处理上传 ...

    Thinking in Java 4th Edition

    String operator + and += .............................. 80 Common pitfalls when using operators ........... 81 Casting operators .................. 81 Truncation and rounding ........... 82 Promotion ...

    java常用工具类的使用

    调用DateFormat对象的format方法可以把Date对象转换成为指定格式的String类型数据。比如: Date today=new Date(); DateFormat df=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA); String result=df....

    python3.6.5参考手册 chm

    PEP 498: Formatted string literals PEP 526: Syntax for variable annotations PEP 515: Underscores in Numeric Literals PEP 525: Asynchronous Generators PEP 530: Asynchronous Comprehensions PEP 487:...

    springmybatis

    public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); try { User user = (User) session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1...

    Excel POI读取封装(文件+示范代码)

    List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> datamap = null; DealForeign deal = null; // 存放带验证信息的属性 Map<String, String> ...

    DbEntry原版文档2003.doc

    static void Main(string[] args) { User u = new User(); u.Name = "tom"; Console.WriteLine("New object:\n{0}", u); DbEntry.Save(u); Console.WriteLine("Saved object:\n{0}", u); Console.ReadLine()...

    freemarker总结

    JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......

    java编写的计算器,能实现加减乘除

    String copy; //做复制用 JTextArea help; //帮助 JScrollPane scrollHelp; static boolean One =true; //******************// //*****构造函数开始*****// public Calculator() { ...

    struts_2.3.12GA_API文档(chm版本)

    String getText(String key, String defaultValue, String[] args, ValueStack stack) Gets a message based on a key using the supplied args, as defined in MessageFormat, or, if the message is not found,...

    5.设计一个逻辑算术计算器,用来输入所需的数,并计算结果

    Object temp = event.getSource(); try { //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后 for (int i = 0; i ; i++) if (temp == button[i] && clickable == true) textAnswer....

    一个跨平台的CString源码

    // FILE: StdString.h // AUTHOR: Joe O'Leary (with outside help noted in comments) // // If you find any bugs in this code, please let me know: // // jmoleary@earthlink.net // ...

    号称.Net下最快的json组件fastJSON.zip

     static void Main(string[] args)  {  var zoo1 = new zoo();  zoo1.animals = new List();  zoo1.animals.Add(new cat() { Name = "hello kitty", legs = 4 });  zoo1.animals.Add(new...

    2009 达内Unix学习笔记

    集合了 所有的 Unix命令大全 ...telnet 192.168.0.23 自己帐号 sd08077-you0 ftp工具 192.168.0.202 tools-toolss ... 各个 shell 可互相切换 ksh:$ sh:$ csh:guangzhou% bash:bash-3.00$ ... date [-u] [+format] ...

    王小平版遗传算法的光盘源代码

    Here, FORMAT is #defined to be the format string associated with the GENERIC type, eg if GENERIC == float then FORMAT == "%f". SAMPLE POPULATION PARAMETERS FILE: seed = 11287 # use this if...

    Git-2.21.0-64-bit.zip

    * The code to show args with potential typo that cannot be interpreted as a commit-ish has been improved. * "git clone --recurse-submodules" learned to set up the submodules to ignore commit ...

Global site tag (gtag.js) - Google Analytics