寻找将数字转化为定长字符串的方法,最终发现用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) 编辑 收藏