java字符串格式化_java字符串格式化

寻找将数字转化为定长字符串的方法,最终发现用String类的Format可以实现

示例:

int id = 0;

String id2 = String .format("%010d", id);  //前导置零,10位长度的字符串

函数原型:

format

public static String format(String format,

Object... args)

使用指定的格式字符串和参数返回一个格式化字符串。

始终使用 Locale.getDefault() 返回的语言环境。

参数:

format - 格式字符串

args - 格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数的数目是可变的,可以为 0。参数的最大数目受 Java Virtual Machine Specification 所定义的 Java 数组最大维度的限制。有关 null 参数的行为依赖于转换。

返回:

一个格式化字符串

抛出:

IllegalFormatException - 如果格式字符串中包含非法语法、与给定的参数不兼容的格式说明符,格式字符串给定的参数不够,或者存在其他非法条件。有关所有可能的格式化错误的规范,请参阅 formatter 类规范的详细信息 一节。

NullPointerException - 如果 format 为 null

一、第一个参数是格式化字符串,其语法:

1、常规类型、字符类型和数值类型的格式说明符的语法如下:

%[argument_index$][flags][width][.precision]conversion

*可选的 argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。

*可选 flags 是修改输出格式的字符集。有效标志集取决于转换类型。

*可选 width 是一个非负十进制整数,表明要向输出中写入的最少字符数。

*可选 precision 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。

*所需 conversion 是一个表明应该如何格式化参数的字符。给定参数的有效转换集取决于参数的数据类型。

2、用来表示日期和时间类型

%[argument_index$][flags][width]conversion

*可选的 argument_index、flags 和 width 的定义同上。

*所需的 conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的字符。

3、与参数不对应的格式说明符的语法如下:

%[flags][width]conversion

可选 flags 和 width 的定义同上。

所需的 conversion 是一个表明要在输出中所插内容的字符。

二、语法中个元素对应的参数

1、标志(flags)

下表总结了受支持的标志。y 表示该标志受指示参数类型支持。标志常规字符整数浮点日期/时间说明

'-'yyyyy结果将是左对齐的。

'#'y1-y3y-结果应该使用依赖于转换类型的替换形式

'+'--y4y-结果总是包括一个符号

'  '--y4y-对于正值,结果中将包括一个前导空格

'0'--yy-结果将用零来填充

','--y2y5-结果将包括特定于语言环境的组分隔符

'('--y4y5-结果将是用圆括号括起来的负数

2 只适用于 'd' 转换。

3 只适用于 'o'、'x' 和 'X' 转换。

4 对 BigInteger 应用 'd'、'o'、'x' 和 'X' 转换时,或者对 byte 及 Byte、short 及 Short、int 及 Integer、long 及 Long 分别应用 'd' 转换时适用。

5 只适用于 'e'、'E'、'f'、'g' 和 'G' 转换。

任何未显式定义为标志的字符都是非法字符,并且都被保留,以供扩展使用。

**String id2 = String .format("%010d", id); 其中引号内第一个0便是用零填充,

2、宽度(width)

宽度是将向输出中写入的最少字符数。对于行分隔符转换,不适用宽度,如果提供宽度,则会抛出异常。

3、精度(precision)

对于常规参数类型,精度是将向输出中写入的最多字符数。

对于浮点转换 'e'、'E' 和 'f',精度是小数点分隔符后的位数。如果转换是 'g' 或 'G',那么精度是舍入计算后所得数值的所有位数。如果转换是 'a' 或 'A',则不必指定精度。

对于字符、整数和日期/时间参数类型转换,以及百分比和行分隔符转换,精度是不适用的;如果提供精度,则会抛出异常。

4、转换(conversion)

下表总结了受支持的转换。由大写字符(如 'B'、'H'、'S'、'C'、'X'、'E'、'G'、'A' 和 'T')表示的转换与由相应的小写字符的转换等同,根据流行的 Locale 规则将结果转换为大写形式除外。后者等同于 String.toUpperCase() 的以下调用out.toUpperCase()

转换参数类别说明

'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'行分隔符结果为特定于平台的行分隔符

任何未明确定义为转换的字符都是非法字符,并且都被保留,以供将来扩展使用

此外还有日期格式的转换,在此不列出。

(以上来源于JDK1.6)

posted on 2010-08-19 16:35 xyan 阅读(4901) 评论(0)  编辑  收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值