Java 字符串参数格式化

周海汉 2020-04-29
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协议,转载请注明来源