不同的格式字符可以格式化不同數(shù)據(jù)類型的值。例如,“s"用于將值格式化為字符串。
Java 打印格式化類型可以將數(shù)據(jù)類型格式化為四種類型:
許多轉(zhuǎn)換字符具有大寫變體。例如,“S"是“s"的大寫變體。
大寫變量將格式化的輸出轉(zhuǎn)換為大寫。
下面的代碼演示了使用大寫變量“S"的效果。
public class Main { public static void main(String[] args) { System.out.printf("%s and %<S", "abc"); } }
上面的代碼生成以下結(jié)果。
一般格式化可以格式化任何數(shù)據(jù)類型的值。
下表列出了可用的轉(zhuǎn)化根據(jù)一般格式類別。
b
B
h
H
s
S
一般格式化的格式說明符的一般語法是
%<argument_index$><flags><width><.precision><conversion>
width
指定輸出中的最小字符數(shù)。
如果字符串表示的長度小于width值,結(jié)果將用空格填充。
默認情況下,空格填充在參數(shù)值的左側(cè)執(zhí)行。如果使用“ - "標志,則向右執(zhí)行空格填充。
寬度和精度一起決定結(jié)果的最終內(nèi)容。
precision指定輸出的最大字符數(shù)。在應用寬度之前,精度應用于參數(shù)。
如果精度小于參數(shù)的長度,參數(shù)被截斷為在精度值中設置的長度,并執(zhí)行空間填充以將長度與寬度的值相匹配。
考慮下面的代碼段:
System.out.printf(""%4.1s"", "abc");
上面的代碼生成以下結(jié)果。
以下是使用布爾,字符串和散列碼格式轉(zhuǎn)換的一些示例。
public class Main { public static void main(String[] args) { // Boolean conversion System.out.printf(""%b", "%6b", "%.4b"%n", true, false, true); System.out.printf(""%b", "%6b", "%.4b"%n", "A", "B", "C"); System.out.printf(""%B", "%6b", "%.4b"%n", "A", "B", "C"); System.out.printf("%b %n", 2014); System.out.printf("%b %n", new Object()); // String conversion System.out.printf(""%s", "%5s", "%.3s"%n", "A", "B", "C"); System.out.printf(""%S", "%5S", "%.3S"%n", "A", "B", "C"); // Use "-" flag to left-justify the result. // width requires the "-" flag System.out.printf(""%S", "%-5S", "%.3S"%n", "A", "B", "C"); System.out.printf("%s %n", 2014); System.out.printf("%s %n", true); System.out.printf("%s %n", new Object()); // Hash Code conversion System.out.printf(""%h", "%5h", "%.3h"%n", "A", "B", "A"); System.out.printf(""%H", "%5H", "%.3H"%n", "A", "B", "A"); System.out.printf("%h %n", 2014); System.out.printf("%h %n", true); System.out.printf("%h %n", new Object()); } }
上面的代碼生成以下結(jié)果。
我們可以通過“s"和“S"轉(zhuǎn)換使用自定義格式。
如果值實現(xiàn) java.util.Formattable
界面,“s"或“S"轉(zhuǎn)換調(diào)用值的“ formatTo()
方法來獲取格式化結(jié)果。
formatTo()方法從該值可以接受一個Formatter對象,flags,width和precision作為參數(shù)。
我們可以檢查備用標志“#"。 我們可以支持“s"轉(zhuǎn)換的大寫variantS。
import java.util.Formattable; import java.util.FormattableFlags; import java.util.Formatter; class MyFormattableObject implements Formattable { public void formatTo(Formatter formatter, int flags, int width, int precision) { int alternateFlagValue = FormattableFlags.ALTERNATE & flags; if (alternateFlagValue == FormattableFlags.ALTERNATE) { System.out.println("FormattableFlags.ALTERNATE"); } int upperFlagValue = FormattableFlags.UPPERCASE & flags; if (upperFlagValue == FormattableFlags.UPPERCASE) { System.out.println(FormattableFlags.UPPERCASE); } int leftJustifiedFlagValue = FormattableFlags.LEFT_JUSTIFY & flags; if (leftJustifiedFlagValue == FormattableFlags.LEFT_JUSTIFY) { System.out.println("Left-justified flag "-" is used"); } else { System.out.println("Left-justified flag "-" is not used"); } formatter.format("value"); } } public class Main { public static void main(String[] args) { MyFormattableObject fp = new MyFormattableObject(); System.out.printf("%s %n", fp ); System.out.printf("%#s %n", fp ); System.out.printf("%S %n", fp ); System.out.printf("%#S %n", fp ); } }
上面的代碼生成以下結(jié)果。
字符格式化也適用于char基本數(shù)據(jù)類型或字符對象作為byte, Byte, short, Short, int, 或Integer值是有效的Unicode代碼點。
要測試整數(shù)值是否表示有效的Unicode代碼,請使用靜態(tài)方法 Character.isValidCodePoint(int value)
。
字符格式化的轉(zhuǎn)換字符為“c"或大寫變量“C"。
字符格式化不支持標志“#"和精度。
標志“ - "和寬度控制寬度和對齊方式,如一般格式化。
public class Main { public static void main(String[] args) { System.out.printf("%c %n", "a"); System.out.printf("%C %n", "a"); System.out.printf("%C %n", 98); System.out.printf(""%5C" %n", 102); System.out.printf(""%-5C" %n", 102); } }
上面的代碼生成以下結(jié)果。
更多建議: