寻找将数字转化为定长字符串的方法,最终发现用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 表示该标志受指示参数类型支持。
标志
| 常规
| 字符
| 整数
| 浮点
| 日期/时间
| 说明
|
'-'
| y
| y
| y
| y
| y
| 结果将是左对齐的。
|
'#'
| y1
| -
| y3
| y
| -
| 结果应该使用依赖于转换类型的替换形式
|
'+'
| -
| -
| y4
| y
| -
| 结果总是包括一个符号
|
' '
| -
| -
| y4
| y
| -
| 对于正值,结果中将包括一个前导空格
|
'0'
| -
| -
| y
| y
| -
| 结果将用零来填充
|
','
| -
| -
| y2
| y5
| -
| 结果将包括特定于语言环境的组分隔符
|
'('
| -
| -
| y4
| y5
| -
| 结果将是用圆括号括起来的负数 |
1 取决于 Formattable
的定义。
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)