AdSense

網頁

2019/12/22

Java String.format() 字串格式化用法

String.format(String format, Object... args)可建立格式化的字串(formatted string)。

所謂的格式化的字串是指由格式化字串(format string)與參數(args)組成的字串,也就是String.format(String format, Object... args)的第一個參數format及後接的多個參數args

格式化字串(format string)是由固定字串搭配多個格式化符號(format specifiers)組成的字串,請見下面範例。

String format = "Your name is %s"; // 格式化字串
String arg = "Bill"; // 格式化字串的參數
String yourNameIs = String.format(format, arg); // 使用格式化字串搭配參數組成格式化的字串

System.out.print(yourNameIs); // Your name is Bill

變數format為格式化字串,由固定字串"Your name is"搭配格式化符號%s組成。
變數arg為格式化字串參數,在格式化時會替代格式化符號%s
變數yourNameIs即為格式化的字串。

上面的程式可簡化為以下。

String yourNameIs = String.format("Your name is %s", "Bill");
System.out.print(yourNameIs); // Your name is Bill

如果只是要在console印出可直接用System.out.printf(String format, Object... args)

System.out.printf("Your name is %s", "Bill"); // Your name is Bill

傳入多個格式字串參數

System.out.printf("An %s a day, keeps the %s away.%n", "apple", "doctor"); // An apple a day, keeps the doctor away.
System.out.printf("你媽超%s,你全家都%s!%n", "胖", "肥宅"); // 你媽超胖,你全家都肥宅!

%s僅表示字串格式化符,其餘的格式化符號請參考java.util.Formatter的API文件,分為以下幾類。

  • General(通用):可套用任意的參數形式。
  • Character(字符):可套用表示Unicode字符的型別。
  • Numeric(數值)
    • Integral(整數):可套用Java整數型別
    • Floating Point(浮點數):可套用Java浮點數型別
  • Date/Time(日期時間):可套用在可轉換為日期或時間型態的型別
  • Percent(百分比):代表%實字。
  • Line Separator(斷行):代表斷行。

以下是一些基本範例,每一行後都使用%n斷行。

System.out.printf("%b%n", 0); // true (布林)
System.out.printf("%b%n", 1); // false (布林)
System.out.printf("%b%n", null); // false (布林)
System.out.printf("%h%n", 15); // f (Hex表示)
System.out.printf("%s%n", "ABC"); // ABC (字串)
System.out.printf("%c%n", 65); // A (字元)
System.out.printf("%c%n", 0x597d); // 好 (字元)
System.out.printf("%d%n", 123); // 123 (整數)
System.out.printf("%d%n", -123); // -123 (整數)
System.out.printf("%o%n", 15); // 17 (Octal表示)
System.out.printf("%x%n", 15); // f (Hex表示)
System.out.printf("%e%n", 123.456); // 1.234560e+02 (科學符號表示)
System.out.printf("%f%n", 123.456); // 123.456000 (浮點數)
System.out.printf("%g%n", 123.456); // 123.456 (科學符號表示或普通數值表示,採用長度較短的方案)
System.out.printf("%a%n", 123.456); // 0x1.edd2f1a9fbe77p6 (Hex表示浮點數)
System.out.printf("%d%%%n", 123); // 123% (%實字)

下面則是使用數字格式符號的簡單範例,請參考Number Localization Algorithm

System.out.printf("%+d%n", 123); // +123 (整數加正號)
System.out.printf("% 5d%n", 123); // __123(整數,輸出長度為5,不足部分左邊補空白)
System.out.printf("%05d%n", 123); // 00123 (整數,輸出長度為5,不足部分左邊補0)
System.out.printf("%-5d%n", 123); // 123___ (整數,輸出長度為5,靠左對齊)
System.out.printf("%,d%n", 1234); // 1,234 (整數,千份位符號)
System.out.printf("%(d%n", -123); // (123) (整數,括弧表示負數)
System.out.printf("This %1$s a %2$s%n", "is", "book"); // This is a book (字串,使用參數索引)

上面數值格式使用的符號如下。

%+ 加正號
左邊補空白
%0 左邊補0
%, 分位符號
%( 負值以括號表示。


如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


沒有留言:

AdSense