转载 ^_^肥仔John –Java魔法堂:String.format详解: https://www.cnblogs.com/fsjohnhuang/p/4094777.html#a7
前言
String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format(“Hello %s”, “John”);
重载方法
// 使用当前本地区域对象(Locale.getDefault())格式化字符串
String String.format(String fmt, Object... args);
// 自定义本地区域对象格式化字符串
String String.format(Locale locale, String fmt, Object... args);
占位符
- 占位符完整格式为: %[index$][标识]*[最小宽度][.精度]转换符 。
- 针对不同数据类型的格式化,占位符的格式将有所裁剪。
- % ,占位符的其实字符,若要在占位符内部使用%,则需要写成 %% 。
- [index$] ,位置索引从1开始计算,用于指定对索引相应的实参进行格式化并替换掉该占位符。
- [标识] ,用于增强格式化能力,可同时使用多个 [标识] ,但某些标识是不能同时使用的。
- [最小宽度] ,用于设置格式化后的字符串最小长度,若使用 [最小宽度] 而无设置 [标识] ,那么当字符串长度小于最小宽度时,则以左边补空格的方式凑够最小宽度。
- [.精度] ,对于浮点数类型格式化使用,设置保留小数点后多少位。
- 转换符 ,用于指定格式化的样式,和限制对应入参的数据类型。
对字符、字符串进行格式化
占位符格式为: %[index$][标识][最小宽度]转换符
示例——将”hello”格式化为” hello”
String raw = "hello";
String str = String.format("%1$7s", raw);
// 简化
//String str = String.format("%7s", raw);
示例——将”hello”格式化为”hello “
String raw = "hello";
String str = String.format("%1$-7s", raw);
// 简化
//String str = String.format("%-7s", raw);
可用标识:
- -,在最小宽度内左对齐,右边用空格补上。
可用转换符:
- s,字符串类型。
- c,字符类型,实参必须为char或int、short等可转换为char类型的数据类型,否则抛IllegalFormatConversionException异常。
- b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。
- n,平台独立的换行符(与通过 System.getProperty(“line.separator”) 是一样的)
对整数进行格式化
占位符格式为: %[index$][标识]*[最小宽度]转换符
示例——将1显示为0001
int num = 1;
String str = String.format("%04d", num)
示例——将-1000显示为(1,000)
int num = -1000;
String str = String.format("%(,d", num)
可用标识:
- -,在最小宽度内左对齐,不可以与0标识一起使用。
- 0,若内容长度不足最小宽度,则在左边用0来填充。
- #,对8进制和16进制,8进制前添加一个0,16进制前添加0x。
- +,结果总包含一个+或-号。
- 空格,正数前加空格,负数前加-号。
- ,,只用与十进制,每3位数字间用,分隔。
- (,若结果为负数,则用括号括住,且不显示符号。
可用转换符:
- b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false
- d,整数类型(十进制)。
- x,整数类型(十六进制)。
- o,整数类型(八进制)
- n,平台独立的换行符, 也可通过System.getProperty(“line.separator”)获取
对浮点数进行格式化
占位符格式为: %[index$][标识]*[最小宽度][.精度]转换符
示例:
double num = 123.4567899;
System.out.print(String.format("%f %n", num)); // 123.456790
System.out.print(String.format("%a %n", num)); // 0x1.edd3c0bb46929p6
System.out.print(String.format("%g %n", num)); // 123.457
可用标识:
- -,在最小宽度内左对齐,不可以与0标识一起使用。
- 0,若内容长度不足最小宽度,则在左边用0来填充。
- #,对8进制和16进制,8进制前添加一个0,16进制前添加0x。
- +,结果总包含一个+或-号。
- 空格,正数前加空格,负数前加-号。
- ,,只用与十进制,每3位数字间用,分隔。
- (,若结果为负数,则用括号括住,且不显示符号。
可用转换符:
- b,布尔类型,只要实参为非false的布尔类型,均格式化为字符串true,否则为字符串false。
- n,平台独立的换行符, 也可通过System.getProperty(“line.separator”)获取。
- f,浮点数型(十进制)。显示9位有效数字,且会进行四舍五入。如99.99。
- a,浮点数型(十六进制)。
- e,指数类型。如9.38e+5。
- g,浮点数型(比%f,%a长度短些,显示6位有效数字,且会进行四舍五入)
对日期时间进行格式化
占位符格式为: %[index$]t转换符
示例:
Date now = new Date();
String str = String.format("%tF", now); // 2014-10-12
可用转换符
日期的转换符
- c,星期六 十月 27 14:21:20 CST 2007
- F,2007-10-27
- D,10/27/07
- r,02:25:51 下午
- T,14:28:16
- R,14:28
- b, 月份简称
- B, 月份全称
- a, 星期简称
- A, 星期全称
- C, 年前两位(不足两位补零)
- y, 年后两位(不足两位补零)
- j, 当年的第几天
- m, 月份(不足两位补零)
- d, 日期(不足两位补零)
- e, 日期(不足两位不补零)
时间的转换符
- H, 24小时制的小时(不足两位补零)
- k, 24小时制的小时(不足两位不补零)
- I, 12小时制的小时(不足两位补零)
- i, 12小时制的小时(不足两位不补零)
- M, 分钟(不足两位补零)
- S, 秒(不足两位补零)
- L, 毫秒(不足三位补零)
- N, 毫秒(不足9位补零)
- p, 小写字母的上午或下午标记,如中文为“下午”,英文为pm
- z, 相对于GMT的时区偏移量,如+0800
- Z, 时区缩写,如CST
- s, 自1970-1-1 00:00:00起经过的秒数
- Q, 自1970-1-1 00:00:00起经过的豪秒
其他转换符
<,用于格式化前一个转换符所描述的参数。
示例:
int num = 1000;
String str = String.format("%d %<,d", num);
// 结果"1000 1,000
参考
http://blog.csdn.net/lonely_fireworks/article/details/7962171
http://www.cnblogs.com/xytop/articles/1277125.html