在 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()方法格式化整数、字符串、布尔值、日期和时间。