2020-04-29
Java 字符串参数格式化
想设计一个模板, 直接将java的参数用进去。故整理一下java字符串参数格式化方法。
格式标志
SPECIFIER | APPLIES TO | OUTPUT
–|–|–
%a | floating point (except BigDecimal) | Hex output of floating point number
%b | Any type | “true” if non-null, “false” if null
%c | character | Unicode character
%d | integer (incl. byte, short, int, long, bigint) | Decimal Integer
%e | floating point | decimal number in scientific notation
%f | floating point | decimal number
%g | floating point | decimal number, possibly in scientific notation depending on the precision and value.
%h | any type | Hex String of value from hashCode() method.
%n | none | Platform-specific line separator.
%o | integer (incl. byte, short, int, long, bigint) | Octal number
%s | any type | String value
%t | Date/Time (incl. long, Calendar, Date and TemporalAccessor) | %t is the prefix for Date/Time conversions. More formatting flags are needed after this. See Date/Time conversion below.
%x | integer (incl. byte, short, int, long, bigint) |
Hex string.
格式化通用说明
general, character, numeric 类型
%[argument_index$][flags][width][.precision]conversion
dates and times
%[argument_index$][flags][width]conversion
非参数
%[flags][width]conversion
如%n换行
举例
通用格式化
String output = String.format("%s = %d", "zhh", 25);
System.out.printf("My name is: %s%n", "zhh");
参数索引
用第2个参数,忽略第1个
String.format("%2$s", 32, "Hello"); // prints: "Hello"
字符串格式化
String.format("|%s|", "Hello World"); // prints: "Hello World"
String.format("|%30s|", "Hello World");
// | Hello World|
String.format("|%-30s|", "Hello World");
// |Hello World |
String.format("|%.5s|", "Hello World"); // prints: |Hello|
String.format("|%30.5s|", "Hello World"); // prints: |Hello|
| Hello|
## 货币格式化
String.format("|%,d|", 10000000); // prints: |10,000,000|
整形数字格式化
String.format("%d", 93); // prints 93
String.format("|%20d|", 93); // prints: | 93|
String.format("|%-20d|", 93); // prints: |93 |
String.format("|%020d|", 93); // prints: |00000000000000000093|
String.format("|%+20d|', 93); // prints: | +93|
String.format("|% d|", 93); // prints: | 93| String.format("|% d|", -36); // prints: |-36|
String.format("|%(d|", -36); // prints: |(36)|
// 增加前导0和0x
String.format("|%#o|", 93);
// prints: 0135
String.format("|%#x|", 93);
// prints: 0x5d
String.format("|%#X|", 93);
// prints: 0X5D
浮点格式化
StringBuilder sb = new StringBuilder();
// Send all output to the Appendable object sb
Formatter formatter = new Formatter(sb, Locale.CHINESE);
formatter.format(Locale.CHINESE, "e = |%+10.4f|", Math.E);
System.out.println(formatter.toString());
//e = | +2.7183|
formatter.format("e = |%,.2f|", -Math.E*10000);
//e = |-27,182.82|
formatter.format("e = |%(,.2f|", -Math.E*10000);
//(可以取代负号,|(27,182.82)|
BigDecimal b = new BigDecimal(Math.PI*Math.pow(10,20));
formatter.format("big pi:|%.4f|",b);
//big pi:|314159265358979334144.0000|
日期格式化
常用的格式化标志,全集请参考java doc.
FLAG
NOTES
%tF
ISO 8601 formatted date with “%tY-%tm-%td“.
%tH
Hour of the day for the 24-hour clock e.g. “00” to “23“.
%tM
Minute within the hour formatted a leading 0 e.g. “00” to “59“.
%tm
Month formatted with a leading 0 e.g. “01” to “12“.
%tT
Time formatted as 24-hours e.g. “%tH:%tM:%tS“.
%tY
Year formatted with 4 digits e.g. “0000” to “9999“.
%tS
Seconds within the minute formatted with 2 digits e.g. “00” to “60”. “60” is required to support leap seconds.
%td
Day of the month formatted with two digits. e.g. “01” to “31“.
%tR
Time formatted as 24-hours e.g. “%tH:%tM“.
//月份从0开始,所以需要-1
Calendar c1 = new GregorianCalendar(2020, 4-1, 23);
String s = String.format("那天: %1$tY年%1$tm月%1$te日", c1);
//那天: 2020年03月23日
Calendar c = new GregorianCalendar();
String s = String.format("今天: %1$tY年%1$tm月%1$te日", c);
//今天: 2020年04月29日
s = String.format("今天时间: %1$tY年%1$tm月%1$te日 %1$tH时%1$tM分%1$tS秒", c);
//今天时间: 2020年04月29日 17时31分04秒
参考
https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
https://dzone.com/articles/java-string-format-examples
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源