格式化字符串

String 类的静态 format() 方法用于创建格式化的字符串。format() 方法有两种重载形式。

  1. format(String format,Object…​args)

    该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。语法如下:

    str.format(String format,Object...args)
    • format:格式字符串。

    • args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

  2. format(Local l,String format,Object…​args)

    该方法使用指定的语言环境、格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用其指定的语言环境。语法如下:

    str.format(Local l,String format,Object…args)
    • l:格式化过程中要应用的语言环境。如果l为null,则不进行本地化。

    • format:格式字符串。

    • args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

日期和时间字符串格式化

在应用程序设计中,经常需要显示日期和时间。如果想输出满意的日期和时间格式,一般需要编写大量的代码、经过各种算法才能实现。format() 方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。

日期格式化

先来看一个例子。返回一个月中的天数,代码如下:

Date date = new Date();  //创建Date对象date
String s = String.format("%te", date);  //通过format()方法对date进行格式化

上述代码中变量 s 的值是当前日期中的天数,如今天是 15 号,则 s 的值为 15;%te 是转换符。常用的日期格式化转换符如表10.1所示。

image 2024 03 01 14 52 35 148
Figure 1. 表10.1 常用的日期格式化转换符

【例10.13】按照格式输出今天的年、月、日(实例位置:资源包\TM\sl\10\13)

在项目中创建 Eval 类,控制台输出今天的年、月、日。其中,输出格式为 4 位年份、月份全称和 2 位日期。实例代码如下:

import java.util.Date; //导入java.util.Date类

public class Eval { // 新建类
	public static void main(String[] args) { // 主方法
		Date date = new Date(); // 创建Date对象date
		String year = String.format("%tY", date); // 将date进行格式化
		String month = String.format("%tB", date);
		String day = String.format("%td", date);
		System.out.println("今年是:" + year + "年"); // 输出信息
		System.out.println("现在是:" + month);
		System.out.println("今天是:" + day + "号");
	}
}

运行结果如图10.18所示。

image 2024 03 01 14 53 36 601
Figure 2. 图10.18 例10.13的运行结果

时间格式化

使用 format() 方法不仅可以完成日期的格式化,也可以实现时间的格式化。时间的格式化转换符要比日期的格式化转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒等。格式化时间的转换符如表10.2所示。

image 2024 03 01 14 54 24 042
Figure 3. 表10.2 时间格式化转换符

【例10.14】按照格式输出当下的时、分、秒(实例位置:资源包\TM\sl\10\14)

在项目中创建 GetDate 类,按照格式输出当下的时、分、秒。其中,时、分、秒以2位24时制小时数、2位分钟数、2位秒数的格式进行输出。实例代码如下:

import java.util.Date; //导入java.util.Date类

public class GetDate { // 新建类
	public static void main(String[] args) { // 主方法
		Date date = new Date(); // 创建Date对象date
		String hour = String.format("%tH", date); // 将date进行格式化
		String minute = String.format("%tM", date);
		String second = String.format("%tS", date);
		// 输出的信息
		System.out.println("现在是:" + hour + "时" + minute + "分" + second + "秒");
	}
}

运行结果如图10.19所示。

image 2024 03 01 14 55 33 794

格式化常见的日期时间组合

格式化日期与时间组合的转换符定义了各种日期和时间组合的格式,其中常用的日期和时间组合格式如表10.3所示。

image 2024 03 01 14 56 15 058
Figure 4. 表10.3 常用的日期和时间组合的格式

【例10.15】按照格式输出当下的年、月、日(实例位置:资源包\TM\sl\10\15)

在项目中创建 DateAndTime 类,在控制台上输出当前日期时间的全部信息后,按照“2008-03-25”格式输出当下的年、月、日。实例代码如下:

import java.util.Date; //导入java.util.Date类

public class DateAndTime { // 创建类
	public static void main(String[] args) { // 主方法
		Date date = new Date(); // 创建Date对象date
		String time = String.format("%tc", date); // 将date格式化
		String form = String.format("%tF", date);
		// 将格式化后的日期时间输出
		System.out.println("全部的时间信息是:" + time);
		System.out.println("年-月-日格式:" + form);
	}
}

运行结果如图10.20所示。

image 2024 03 01 14 57 09 690
Figure 5. 图10.20 例10.15的运行结果

常规类型格式化

常规类型格式化可应用于任何参数类型,可通过如表10.4所示的转换符来实现。

image 2024 03 01 15 21 39 709
Figure 6. 表10.4 常规转换符

【例10.16】使用转换符获取表达式的结果(实例位置:资源包\TM\sl\10\16)

在项目中创建 General 类,选择并使用恰当的转换符分别输出400 / 2、3 > 5和用十六进制整数显示200的结果。实例代码如下:

public class General { // 新建类
	public static void main(String[] args) { // 主方法
		String str = String.format("%d", 400 / 2); // 将结果以十进制格式显示
		String str2 = String.format("%b", 3 > 5); // 将结果以boolean型显示
		String str3 = String.format("%x", 200); // 将结果以十六进制格式显示
		System.out.println("400的一半是:" + str); // 输出格式化字符串
		System.out.println("3>5正确吗:" + str2);
		System.out.println("200的十六进制数是:" + str3);
	}
}

运行结果如图10.21所示。

image 2024 03 01 15 22 47 396
Figure 7. 图10.21 例10.16的运行结果

编程训练(答案位置:资源包\TM\sl\10\编程训练)

【训练9】格式化当前时间 按照“HH:MM:SS PM”格式(12时制)格式化当前时间。

【训练10】常规转换符 在控制台上输出“玩家1连续完成5次击杀后,获得了‘已超神’的称号”。其中,“玩家1”“5”“已超神”为变量的值。