java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java格式化输出

一篇文章大家彻底学会Java之格式化输出

作者:凭君语未可

Java提供了多种格式化输出的方式,包括String.format()、System.out.printf()和Formatter类,这些方法支持数字、日期、字符串等多种格式化操作,这篇文章主要介绍了Java格式化输出的相关资料,需要的朋友可以参考下

前言

Java 提供了多种格式化输出的方式,主要通过 String.format()System.out.printf() 和 Formatter 类来实现。常见的格式化操作包括数字、日期、字符串等。

一、 格式化输出方法

1. 使用 String.format() 方法

String.format() 方法返回一个格式化后的字符串,而不直接打印输出。你可以将其存储到变量中或用于其他处理。

语法:

String.format(format, arguments);

示例:

int age = 25;
String formattedString = String.format("My age is %d", age);
System.out.println(formattedString);  // 输出:My age is 25

2. 使用 System.out.printf() 方法

System.out.printf() 方法直接将格式化的输出打印到控制台,类似于 printf 函数在 C 语言中的功能。

语法:

System.out.printf(format, arguments);

示例:

int age = 25;
System.out.printf("My age is %d\n", age);  // 输出:My age is 25

3. 使用 Formatter 类

Formatter 类提供了更多的格式化功能,允许你创建格式化的输出流,并将其写入到 StringBuilderPrintWriter 等对象中。

示例:

import java.util.Formatter; // 导入 java.util.Formatter 类,用于格式化字符串

public class FormatterExample { // 定义一个名为 FormatterExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Formatter formatter = new Formatter(); // 创建一个 Formatter 对象,用于格式化字符串
        formatter.format("My age is %d", 25); // 使用 format 方法格式化字符串
        // "My age is %d" 是格式化模板,%d 是占位符,表示一个整数
        // 25 是传递给占位符 %d 的实际值
        System.out.println(formatter); // 输出格式化后的字符串到控制台
        formatter.close(); // 关闭 Formatter 对象,释放资源
    }
}

代码分析:

运行这段代码后,控制台会输出:

My age is 25

二、 常见的格式说明符:

1. 整数类型格式化说明符

2. 浮点类型格式化说明符

3. 字符串格式化说明符

4. 日期和时间格式化说明符

日期和时间的格式化说明符以 %t 开头,后跟日期/时间的特定类型。

5. 百分号格式化说明符

6. 其他格式化控制符

三、 常用的格式化选项:

1. 宽度(Width)

宽度选项用于控制输出数据的最小字符宽度。如果格式化的内容小于指定宽度,Java 会根据其他选项(如填充符)来填充剩余的空间。

语法:

%[width]specifier

示例:

System.out.printf("|%10d|\n", 123);   // 输出:|       123|
System.out.printf("|%-10d|\n", 123);  // 输出:|123       |

2. 精度(Precision)

精度用于控制浮点数的小数位数以及字符串的最大长度。

2.1. 浮点数的精度:

对于浮点数,可以指定小数点后保留的位数。

语法:

%.[precision]f

示例:

System.out.printf("%.2f\n", 123.456);  // 输出:123.46
System.out.printf("%.3f\n", 123.456);  // 输出:123.456

2.2. 字符串的精度:

对于字符串,可以指定输出字符串的最大字符数。

示例:

System.out.printf("%.5s\n", "HelloWorld");  // 输出:Hello

3. 填充符(Padding Character)

填充符用于控制当数据不够宽度时,用指定的字符填充空白位置。默认情况下,Java 会使用空格填充,但我们可以指定其他字符(如 0)作为填充符。

语法:

%[fill_char][width]specifier

示例:

System.out.printf("|%010d|\n", 123);  // 输出:|0000000123|
System.out.printf("|%-10d|\n", 123);  // 输出:|123       |

4. 对齐(Alignment)

默认情况下,数字和字符串都会右对齐。但可以通过指定符号来改变对齐方式。

示例:

System.out.printf("|%-10d|\n", 123);  // 输出:|123       | 左对齐
System.out.printf("|%10d|\n", 123);   // 输出:|       123| 右对齐(默认)

5. 百分号(%%)

如果我们需要输出一个实际的百分号字符,可以使用 %%

示例:

System.out.printf("The success rate is 100%%.\n");  // 输出:The success rate is 100%.

6. 日期和时间格式化(Date/Time Format)

日期和时间的格式化支持类似宽度、精度等选项。我们可以控制日期/时间输出的宽度和填充方式。

示例:

System.out.printf("%tY-%tm-%td\n", new Date());  // 输出:2025-01-21(日期格式:YYYY-MM-DD)

7. 宽度和精度的组合使用

我们可以组合使用宽度和精度来进一步控制输出格式。例如,控制浮点数的总宽度以及小数点后位数。

示例:

System.out.printf("|%10.2f|\n", 123.456);  // 输出:|    123.46|

8. 自动选择浮动或科学计数法(%g 和 %G)

示例:

System.out.printf("%g\n", 1234567.89);   // 输出:1234567.89
System.out.printf("%g\n", 0.000123456);  // 输出:1.23456e-04
System.out.printf("%G\n", 1234567.89);   // 输出:1234567.89
System.out.printf("%G\n", 0.000123456);  // 输出:1.23456E-04

9. 对齐与填充符结合

填充符与对齐选项结合使用时,可以非常精细地控制输出的格式,常用于表格输出等。

示例:

System.out.printf("|%0-10d|\n", 123);  // 输出:|123       | 左对齐并用0填充
//然而,0 和 - 是互斥的,因为 - 表示左对齐,而 0 表示用 0 填充空白部分。
//当它们同时出现时,0 的行为会被忽略,只有 - 生效。

System.out.printf("|%0+10d|\n", 123);  // 输出:|+0000123| 右对齐并用0填充,带符号

四、 格式化日期:

Java 中的日期格式化通常依赖于 java.text.SimpleDateFormat 类来实现,但如果使用 String.format() 或 System.out.printf(),日期格式化通过 t 系列的格式化说明符进行。

1. %t 系列格式化说明符

日期和时间的格式化说明符以 %t 开头,并跟随一个字母,表示不同的日期和时间部分。常用的日期格式化说明符如下(前文有详细描述):

日期部分:

时间部分:

完整的日期和时间格式:

2. 日期格式化示例

示例 1:格式化完整日期(YYYY-MM-DD)

import java.util.Date; // 导入 java.util.Date 类,用于表示日期和时间

public class DateFormatExample { // 定义一个名为 DateFormatExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Date date = new Date(); // 创建一个 Date 对象,表示当前日期和时间
        System.out.printf("Formatted date: %tF\n", date); // 输出:2025-01-21
        // 使用 printf 方法格式化日期
        // %tF 是一个格式化占位符,表示按照 ISO 8601 格式(yyyy-MM-dd)输出日期
        // date 是传递给占位符的实际日期对象
        // 输出结果为:Formatted date: 2025-01-21(假设当前日期是 2025 年 1 月 21 日)
    }
}

示例 2:格式化时间(HH:MM:SS)

import java.util.Date; // 导入 java.util.Date 类,用于表示当前日期和时间

public class DateFormatExample { // 定义一个名为 DateFormatExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Date date = new Date(); // 创建一个 Date 对象,表示当前日期和时间
        System.out.printf("Formatted time: %tT\n", date);  // 输出:14:30:45
        // 使用 printf 方法格式化时间
        // %tT 是一个格式化占位符,表示按照 24 小时制格式(HH:mm:ss)输出时间
        // date 是传递给占位符的实际日期对象
        // 输出结果为:Formatted time: 14:30:45(假设当前时间是 14:30:45)
    }
}

示例 3:格式化为月份名称和日期(Month Day, Year)

import java.util.Date; // 导入 java.util.Date 类,用于表示日期和时间

public class DateFormatExample { // 定义一个名为 DateFormatExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Date date = new Date(); // 创建一个 Date 对象,表示当前日期和时间
        System.out.printf("Formatted date with month name: %tB %td, %tY\n", date, date, date); // 输出:January 21, 2025
        // 使用 printf 方法格式化日期,并在输出中包含月份名称
        // %tB:格式化为月份的完整名称(例如 January、February 等)
        // %td:格式化为日期的天数部分(例如 01 到 31)
        // %tY:格式化为四位年份(例如 2025)
        // date 是传递给占位符的实际日期对象,这里重复传递了三次 date,分别对应 %tB、%td 和 %tY
        // 输出结果为:Formatted date with month name: January 21, 2025(假设当前日期是 2025 年 1 月 21 日)
    }
}

示例 4:格式化为12小时制(AM/PM)

import java.util.Date; // 导入 java.util.Date 类,用于表示日期和时间

public class DateFormatExample { // 定义一个名为 DateFormatExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Date date = new Date(); // 创建一个 Date 对象,表示当前日期和时间
        System.out.printf("Formatted time in 12-hour format: %tI:%tM %tp\n", date, date, date); // 输出:02:30 PM
        // 使用 printf 方法格式化时间,以 12 小时制格式输出
        // %tI:格式化为 12 小时制的小时部分(01 到 12)
        // %tM:格式化为分钟部分(00 到 59)
        // %tp:格式化为 AM 或 PM
        // date 是传递给占位符的实际日期对象,这里重复传递了三次 date,分别对应 %tI、%tM 和 %tp
        // 输出结果为:Formatted time in 12-hour format: 02:30 PM(假设当前时间是 14:30)
    }
}

3. 格式化日期和时间的组合

我们也可以将日期和时间格式化说明符组合在一起,以显示完整的日期和时间。

示例:日期和时间的完整格式(YYYY-MM-DD HH:MM:SS)

import java.util.Date;

public class DateFormatExample {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.printf("Formatted date and time: %tF %tT\n", date, date);  // 输出:2025-01-21 14:30:45
    }
}

4. 控制输出宽度和填充

当然,和其他格式化类型一样,我们也可以控制日期和时间输出的宽度以及如何填充空白。通过指定宽度,可以保证输出符合要求的格式。

示例:控制日期宽度

import java.util.Date; // 导入 java.util.Date 类,用于表示日期和时间

public class DateFormatExample { // 定义一个名为 DateFormatExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Date date = new Date(); // 创建一个 Date 对象,表示当前日期和时间
        System.out.printf("|%20tF|\n", date);  // 使用 printf 方法格式化日期并输出
        // %tF:格式化日期为 ISO 8601 格式,即 yyyy-MM-dd(例如 2025-01-21)
        // 20:指定字段宽度为 20 个字符
        // 默认情况下,字符串会右对齐,因此左侧会填充空格以达到指定的宽度
        // 输出结果为:|         2025-01-21|(假设当前日期是 2025-01-21)
    }
}

示例:控制时间宽度和填充

import java.util.Date; // 导入 java.util.Date 类,用于表示日期和时间

public class DateFormatExample { // 定义一个名为 DateFormatExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Date date = new Date(); // 创建一个 Date 对象,表示当前日期和时间
        System.out.printf("|%10tT|\n", date);  // 使用 printf 方法格式化时间并输出
        // %tT:格式化时间为 24 小时制格式,即 HH:mm:ss(例如 14:30:45)
        // 10:指定字段宽度为 10 个字符
        // 默认情况下,字符串会右对齐,因此如果格式化后的时间字符串长度小于 10 个字符,
        // 左侧会填充空格以达到指定的宽度
        // 输出结果为:|14:30:45  |(假设当前时间是 14:30:45)
    }
}

5. 日期格式化与 SimpleDateFormat 类结合使用

String.format() 和 System.out.printf() 适用于简单的日期格式化,但如果需要更复杂的格式化(例如自定义格式),可以使用 SimpleDateFormat 类。

示例:自定义日期格式化(使用 SimpleDateFormat)

import java.text.SimpleDateFormat; // 导入 SimpleDateFormat 类,用于自定义日期和时间的格式化
import java.util.Date; // 导入 Date 类,用于表示日期和时间

public class SimpleDateFormatExample { // 定义一个名为 SimpleDateFormatExample 的类
    public static void main(String[] args) { // 主方法,程序的入口点
        Date date = new Date(); // 创建一个 Date 对象,表示当前日期和时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
        // 创建一个 SimpleDateFormat 对象,用于自定义日期和时间的格式化
        // "yyyy/MM/dd HH:mm:ss" 是格式化模板:
        // yyyy:四位年份
        // MM:两位月份
        // dd:两位日期
        // HH:两位24小时制的小时
        // mm:两位分钟
        // ss:两位秒数
        String formattedDate = sdf.format(date); 
        // 使用 format 方法将 Date 对象格式化为指定的字符串格式
        System.out.println("Formatted date and time: " + formattedDate); 
        // 输出格式化后的日期和时间
        // 例如:Formatted date and time: 2025/01/21 14:30:45(假设当前时间是 2025 年 1 月 21 日 14:30:45)
    }
}

总结

到此这篇关于Java格式化输出的文章就介绍到这了,更多相关Java格式化输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文