在 Java 中中的printf()
执行格式化
原文:https://www.studytonight.com/java-examples/formatting-with-printf-in-java
Java printf()是属于 PrintStream 类的一个方法,和 c 语言中的 printf()函数非常相似,用来格式化输出并打印到控制台。这个方法使用 java.util.Formatter 类来解析和格式化输出。在本教程中,我们将学习如何使用 printf()方法。
Java Printf()方法
如上所述,printf()方法用于在 Java 中格式化字符串。该方法的一般语法如下所示。
System.out.printf(string)
System.out.printf(format string, comma separated variables values or objects)
System.out.printf(locale, format string, comma-separated variables values or objects)
- 如果传递了区域设置,则根据所提到的区域进行格式化。
- 我们通常只使用两个参数——一个是格式化字符串,另一个包括对象、变量或值。
- 格式字符串定义了用户如何看到输出。格式化字符串的一般结构如下所示。如果我们希望输出一些值,必须包含转换字符,但是其他修饰符是可选的。
%[flags][width][.precision][conversion-characters]
- 没有任何说明符和变量,printf()的工作方式与 print()或 println()完全一样。下面的示例演示了如果不使用格式化字符串,printf()和 println()的输出是如何相同的。
public static void main(String args[])
{
System.out.println("Printing using println().");
System.out.printf("Printing using printf().");
}
使用 println()打印。 使用 printf()打印。
在 Java 中使用 print()格式化字符
根据我们试图打印的变量或值的数据类型,格式字符串必须包含转换字符。以下列表包括一些最常用的转换字符。
- c 格式化字符或字符。
- s 格式化字符串。
- d 格式化整数。
- f 格式化浮点或小数。
- t 格式化日期和时间。
- b 格式化布尔值或条件表达式。
- e 格式化指数浮点数。
- %n 用作换行符,将光标移到下一行。
public static void main(String args[])
{
System.out.printf("Printing an integer %d %n", 10);
System.out.printf("Printing a floating-point number %f %n", 10.0);
System.out.printf("Printing an exponential floating-point number %e %n", 10.0);
System.out.printf("Printing a string %s %n", "String");
System.out.printf("Printing a character %c %n", 'A');
}
打印整数 10 打印浮点数 10.000000 打印指数浮点数 1.000000e+01 打印字符串 打印字符 A
我们必须根据变量或值的数据类型使用正确的转换字符。如果它们不匹配,那么我们将得到一个非法格式转换异常。考虑以下示例,其中整数的转换字符用于格式化字符串。
public static void main(String args[])
{
System.out.printf("%d", "ABC");
}
线程“main”中出现异常 Java . util . illegalformationconversationexception:d!= java.lang.String 位于 java . base/Java . util . formatter $ format 说明符. fail conversion(formatter . Java:4426) 位于 Java . base/Java . util . formatter $ format 说明符. print integer(formatter . Java:2938) 位于 Java . base/Java . util . formatter $ format 说明符. print(Formatter.java:2892) 位于 Java . base/Java . util . formatter . format(formatter . Java:2673) 位于 Java
一些转换字符也可以用来将字母转换成大写。例如,如果我们使用“C”而不是“C”,那么字符值将以大写形式打印。同样的规则可以应用于字符串和布尔值。请记住,这不会反过来工作,即“c”不会将大写字母转换为小写字母。
示例:打印时格式化小写和大写()
下面的代码示例演示了大写和小写转换字符的使用。
public static void main(String args[])
{
System.out.printf("%c%n", 'a');
System.out.printf("%C%n", 'a');
System.out.printf("%s%n", "lowercase");
System.out.printf("%S%n", "uppercase");
System.out.printf("%b%n", 10 < 5);
System.out.printf("%B%n", 10 < 5);
}
a A 小写 大写 假 假
printf()方法中的标志
标志用于以不同的方式修改格式化的输出。例如,连字符(-) 可用于左对齐我们的字符串,逗号(,可用于添加千位分隔符。
public static void main(String args[])
{
System.out.printf("%d%n", 1000000);//without flag
System.out.printf("%,d", 1000000);//with flag
}
1000000 1000000
使用 printf()方法设置宽度
宽度用于指定控制台中输出的最小空格数。例如,如果我们使用“%5s”,那么将分配至少 5 个位置。如果要打印的值具有较小的长度,那么将在它的前面添加填充,否则该值将按原样打印。考虑下面的例子来更好地理解它。
public static void main(String args[])
{
System.out.printf("%5s", "string");
}
上述代码的输出将仅仅是单词“string”。
但是,带有填充的输出看起来像“'- string”,其中连字符表示一个空格。
public static void main(String args[])
{
System.out.printf("'%15s'", "string");
}
使用 printf()方法设置精度
精度可用于指定浮点数小数点后的位数。它也可以用来提取子字符串。
public static void main(String args[])
{
System.out.printf("%.4f %n", 3.14159265359);//rounding pi up to 4 decimal places
System.out.printf("%.3s", "string");//first three characters of the string
}
3.1416 str
使用 printf()格式化数字
如上所述,%d 用于格式化整数,%f 用于格式化浮点数。默认情况下,%f 将在输出中添加额外的零。我们可以通过使用精度修饰符来限制它们。
public static void main(String args[])
{
System.out.printf("Integer: %d%n", 10);
System.out.printf("Float: %f", 10.01);
}
整数:10 浮点数:10.010000
我们也可以使用逗号标志用千位分隔符来格式化数字。我们还可以使用区域设置来指定区域。例如,在意大利使用点,但英语使用逗号。
public static void main(String args[])
{
System.out.printf(Locale.ENGLISH, "%,d%n", 1000000);
System.out.printf(Locale.ITALY, "%,d", 1000000);
}
100 万 100 万
我们还可以通过在转换字符前输入 0 并指定宽度来用零填充数字。
public static void main(String args[])
{
System.out.printf("%010d%n",158);
}
0000000158
使用 printf()格式化日期和时间
对于日期和时间格式,我们必须使用某些后缀和“t”转换字符。让我们分别看一下日期和时间格式。
时间格式
我们可以简单地通过使用带有“T”转换字符的“T”后缀来打印日期的时间部分。
public static void main(String args[])
{
Date date = new Date();
System.out.printf("Time: %tT", date);
}
时间:18:07:38
下列后缀用于时间格式化。
- H 用于提取日期的小时部分。
- M 用于提取日期的分部分。
- S 用于提取日期的秒部分。
- L 用于提取日期的毫秒部分。
- n 用于提取日期的纳秒部分。
- p 用于打印上午或下午。
- z 用于打印时区。
看看下面的代码,以便更好地理解时间格式。
public static void main(String args[])
{
Date date = new Date();
System.out.printf("Hours: %tH Minutes: %tM Seconds: %tS Milliseconds: %tL%n", date, date, date, date);
}
小时:17 分钟:58 秒:26 毫秒:793
正如我们在上面的代码中看到的,我们需要多次提到日期变量。通过使用格式字符串中的索引引用 1$ ,有一个简单的方法可以解决这个问题。
public static void main(String args[])
{
Date date = new Date();
System.out.printf("Hours: %1$tH Minutes: %1$tM Seconds: %1$tS Milliseconds: %1$tL%n",
date);
}
小时:18 分 01 秒:32 毫秒:783
日期格式
以下是日期格式最常用的后缀列表。
- A 用来打印当天的全称。
- 一个用来打印当天的缩写名称
- B 用于打印月全称。
- b 用于打印月份的简称。
- d 用于打印当月的两位数日。
- m 用于打印年度的两位数月份。
- Y 用于输出四位数的年份。
- y 用于输出两位数的年份。
考虑下面的例子,以更好地理解日期格式。
public static void main(String args[])
{
Date date = new Date();
System.out.printf("Day: %tA Date: %td Month: %tB Year: %tY%n",
date, date, date, date);
}
日:周四日期:08 月:7 月年份:2021
我们也可以使用 1 美元的索引引用进行日期格式化。
public static void main(String args[])
{
Date date = new Date();
System.out.printf("Day: %1$tA Date: %1$td Month: %1$tB Year: %1$tY%n",
date);
}
日:周四日期:08 月:7 月年份:2021
摘要
人们必须知道如何正确地格式化和打印输出,以便于阅读和理解。Java 有一个 printf()方法,用于格式化输出。它使用由转换字符和可选修饰符组成的格式字符串。在本教程中,我们学习了如何使用 printf()方法格式化整数、字符串、布尔值、日期和时间。