Java 打印格式
Java格式 - Java 打印格式
不同的格式字符可以格式化不同数据类型的值。例如,“s"用于将值格式化为字符串。
Java 打印格式化类型可以将数据类型格式化为四种类型:
- 一般格式化
- 字符格式化
- 数字格式化
- 日期/时间格式
大写变量
许多转换字符具有大写变体。例如,“S"是“s"的大写变体。
大写变量将格式化的输出转换为大写。
下面的代码演示了使用大写变量“S"的效果。
public class Main { public static void main(String[] args) { System.out.printf("%s and %<S", "abc"); } }
上面的代码生成以下结果。
一般格式化
一般格式化可以格式化任何数据类型的值。
下表列出了可用的转化根据一般格式类别。
- 转换字母:
b
大写:B
基于参数输出“true”或“false”。 “false”表示空参数和false布尔参数。 否则,“真”。 - 转换字母:
h
大写:H
以字符串的参数的十六进制格式输出哈希码。 如果参数为null,它会产生“null”。 - 转换字母:
s
大写:S
输出参数的字符串表示形式。
如果参数为null,它会产生一个“null”字符串。 如果参数实现了Formattable接口,它将调用参数的formatTo()方法。
如果参数不实现Formattable接口,则调用toString()方法。
一般格式化的格式说明符的一般语法是
%<argument_index$><flags><width><.precision><conversion>
width
指定输出中的最小字符数。
如果字符串表示的长度小于width值,结果将用空格填充。
默认情况下,空格填充在参数值的左侧执行。如果使用“ - "标志,则向右执行空格填充。
宽度和精度一起决定结果的最终内容。
precision指定输出的最大字符数。在应用宽度之前,精度应用于参数。
如果精度小于参数的长度,参数被截断为在精度值中设置的长度,并执行空间填充以将长度与宽度的值相匹配。
考虑下面的代码段:
System.out.printf(""%4.1s"", "abc");
上面的代码生成以下结果。
例子
以下是使用布尔,字符串和散列码格式转换的一些示例。
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()); } }
上面的代码生成以下结果。
自定义格式化
我们可以通过“s"和“S"转换使用自定义格式。
如果值实现 java.util.Formattable
界面,“s"或“S"转换调用值的“ formatTo()
方法来获取格式化结果。
formatTo()方法从该值可以接受一个Formatter对象,flags,width和precision作为参数。
我们可以检查备用标志“#"。 我们可以支持“s"转换的大写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 ); } }
上面的代码生成以下结果。
字符格式化
字符格式化也适用于char基本数据类型或字符对象作为byte, Byte, short, Short, int, 或Integer值是有效的Unicode代码点。
要测试整数值是否表示有效的Unicode代码,请使用静态方法 Character.isValidCodePoint(int value)
。
字符格式化的转换字符为“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); } }
上面的代码生成以下结果。
更多建议: