Java学习笔记(七)--格式化字符串及格式输出

本文详细介绍了Java中如何使用String.format()和System.out.printf()进行字符串格式化,包括日期时间、常规类型以及控制台输出的格式化方法。内容涵盖了日期时间的格式化符号、常规类型的转换以及格式化输出的宽度和精度设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、格式化字符串

String 类的静态 format() 方法用于创建格式化的字符串。

1、format(String format, Object···args)

该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境(可用 Locale.getDefault() 方法查看本地语言环境)。

str1 = str.format(String format, Object···args);
  • format:格式字符串。
  • args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

2、format(Local l, String format, Object···args)

str1 = str.format(Local l, String format, Object···args)
  • l:格式化过程中要应用的语言环境。如果 l 为 null,则不进行本地化。
  • format:格式化字符串。
  • args:格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。此参数的数目是可变的,可以为0。

下面是一个例子演示图片:

在这里插入图片描述

1.1 日期和时间字符串格式化

format() 方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。

1.1.1 日期格式化

在这里插入图片描述
实例:在项目中创建类GetDate。

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

public class GetDate {
	public static void main(String[] args) {
		Locale l = Locale.getDefault();   //获取本地默认语言环境
		System.out.println("默认语言环境" + l);
		Date date = new Date();    //创建Date对象date
		
		//指定语言环境格式化date 
		String year = String.format("%tY", date);
		String month = String.format(Locale.US, "%tB", date);
		String day = String.format("%td", date);
		String week = String.format(Locale.US, "%tA", date);
		System.out.println("\n英文:");
		System.out.println(month + "\n" + week);
		
		//本地语言环境格式化
		String month1 = String.format("%tB", date);
		String week1 = String.format("%tA", date);
		System.out.println("\n本地语言:");
		System.out.println(year + "年" + month1  + day + "日" + week1);
	}
}

代码及运行结果图片:
在这里插入图片描述

1.1.2 时间格式化

format() 方法可实现Date对象时间的格式化。
在这里插入图片描述

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

Date对象的格式化日期和时间转换符定义了各种日期和时间组合的格式。
在这里插入图片描述

1.2 常规类型格式化

常规类型的格式化可应用于任何参数类型。
在这里插入图片描述String 类的静态方法 format() 用来创建可复用的格式化字符串,实现不同数据类型到字符串的转换。

二、格式化控制台输出

输出格式化数字可以使用 printf() 和 format() 方法。

使用 System.out.printf() 方法在控制台上显示格式化输出。

System.out.printf(format, item1, item2, ..., itemn);

这里的 format 是指一个由子串和格式说明符构成的字符串。格式说明符指定每个条目应该如何显示。这里的条目可以是数值、字符、布尔值或字符串。简单的格式说明符是以百分号 (%) 开头的转换码。

2.1 用于 printf 的转换符

转换符类型举例
d十进制整数159
x十六进制整数9f
o八进制整数237
f定点浮点数15.9
e指数浮点数1.59e+01
g通用浮点数-
a十六进制浮点数0x1.fccdp3
s字符串Hello
c字符H
b布尔True
h散列码42628b2
tx日期时间x见下
%百分号%
n与平台有关的行分隔符-

2.2 用于 printf 的标志

标志目的举例
+打印正数和负数的符号+3333.33
空格在正数之前添加空格| 3333.33|
0数字前面补0003333.33
-左对齐|3333.33 |
(将负数括在括号内(3333.33)
,添加分组分隔符3,333.33
#(对于f格式)包含小数点3333.33
#(对于x或0格式)添加前缀0x或00xcafe
$给定被格式化的参数索引。如%1$d将以十进制打印第一个参数159 9F
<格式化前面说明的数值。如%d%<x以十进制和十六进制打印同一个数值159 9F

2.3 时间和日期的转换符

在这里,使用以 t 开始,格式为 tx,x代表的内容如下表:

转换符类型举例
c完整的日期和时间周日 4月 19 11:51:37 CST 2020
FISO 8601 日期2020-04-19
D美国格式的日期(月/日/年)04/19/20
T24小时时间11:56:27
r12小时时间11:57:05 上午
R24小时时间没有秒11:56
Y4位数字的年2020
y年的后两位数字20
C年的前两位数字20
B月的完整拼写February
b或h月的缩写Feb
m两位数字的月04
d两位数字的日(前面补0)09
e两位数字的日(前面不补0)9
A星期几的完整拼写Monday
a星期几的缩写Mon
j三位数的年中的日子(前面补0),在001到366之间069
H两位数字的小时(前面补0),0到23之间12
k两位数字的小时(前面不补0),0到23之间12
I(i的大写)两位数字的小时(前面补0),0到12之间06
l(L的小写)两位数字的小时(前面不补0),0到12之间6
M两位数字的分钟(前面补0)05
S两位数字的秒(前面补0)19
L三位数字的毫秒(前面补0)047
N九位数字的毫微秒(前面补0)020000000
P上午或下午的大写标志PM
p上午或下午的小写标志am
z从GMT起,RFC822数字位移+0800
Z时区CST
s从格林威治时间1970-01-01 00:00:00 起的秒数1587270316
Q从格林威治时间1970-01-01 00:00:00 起的毫秒数1587270331450

2.4 使用参数索引格式化输出日期

Date date = new Date();
	System.out.printf("%1$s %2$tB%2$te日, %2$tY","data:",date);
//输出结果为 
data: 四月19日, 2020

索引必须紧跟在%后面,并以$终止。参数索引值从1开始,而不是从0开始。

同样还可以使用 < 标志。它指示前面格式说明中的参数将再次使用。

System.out.printf("%s %tB%<te日, %<tY","data:",date);

2.5 指定宽度和精度

举例输出
%5c输出字符并在这个字符条目前面加4个空格
%6b输出布尔值,在false值前加一个空格,在true值前加两个空格
%5d输出整个条目,宽度至少为5.如果该条目的数字位数小于5,就在数字前面加空格.如果该条目的位数大于5,则自动增加宽度
%10.2f输出的浮点条目宽度至少为10,包括小数点、和小数点后两位数字.这样,给小数点前分配了7位数字. 如果该条目小数点前的位数小于7,就在数字前面加空格. 如果该条目小数点前的位数大于7,则自动增加宽度.
%10.2e输出的浮点条目的宽度至少为10,包括小数点、小数点后面两位数字和指数部分.如果按科学计数法显示的数字位数小于10,就给数字前加空格
%12s输出的字符串至少为12个字符.如果该字符串条目小于12个字符,就在该字符串前加空格.如果该字符串条目多余12个字符,则自动增加宽度

例子

public class PrintfDemo {
    public static void main(String[] args) {
        System.out.printf("%5.6f",12345678.12345678);
        System.out.println();
        System.out.printf("%8.4f",1.12);
        System.out.println();
        System.out.printf("%-8.4f",1.12);
    }
}
/*输出:
12345678.123457
 1.1200
1.1200 
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值