详述 Java 语言中的格式化输出

详述 Java 语言中的格式化输出1前言相信大家在学习Java语言的时候,见到的第一条输出语句,就是:System.out.println(“HelloWorld”);毫无疑问,该语句的作用就是将HelloWorld打印到控制台,格式也非常的简单,直接按原格式输出。但是,如果将输出的内容换成“数值”或者“日期”呢?其打印的格式是否会有什么不同的变化呢?在本文中,就让咱们一起看一看在Java语言中,数值和日期是如何进行格

大家好,又见面了,我是你们的朋友全栈君。

1 前言

相信大家在学习 Java 语言的时候,见到的第一条输出语句,就是:

System.out.println("Hello World");

毫无疑问,该语句的作用就是将Hello World打印到控制台,格式也非常的简单,直接按原格式输出。

但是,如果将输出的内容换成“数值”或者“日期”呢?其打印的格式是否会有什么不同的变化呢?接下来,就让咱们一起看一看在 Java 语言中,数值和日期是如何进行格式化输出的。

2 数值

首先,给出代码示例:

/** * @author 维C果糖 * @create 2017-03-28-上午9:45 */

public class SysDemo { 
   
    public static void main(String[] args) {
        double d = -12345.678;
        System.out.printf("%6.2f" , d);
        System.out.println();
        System.out.printf("%,(.2f" , d);
        System.out.println();
        System.out.printf("%,6.1f" , d);
        System.out.println();
        System.out.printf("%s" , d);        // 转换成字符串
        System.out.println();
        System.out.printf("%h" , d);        // 转换成散列码
    }
}

运行上述代码,结果如下图所示:

这里写图片描述

如上图所示,以输出第一个结果的代码为例,%6.2f表示除符号位外,共6+2=8个字符的宽度,以及小数点后两个字符的精度打印数值。其中,每一个以%字符开始的格式说明符都用相应的参数进行替换,格式说明符尾部的转换符表示被格式化的数值类型,例如f就表示浮点数。下面,列出常用的转换符:

转换符 类型 举例
d 十进制整数 250
f 定点浮点数 12.3
s 字符串 hello
c 字符 a
b 布尔型 true
h 散列码 87c258e

此外,如第二个输出结果所示,还有用于printf函数的标记。下面列出常见的标记:

标记 目的 举例
+ 打印正数和负数的符合 +12345.6
( 将负数括在括号内 (12345.68)
添加分组分隔符 12,345.7
0 数字前面用 0 补位 00123.45

在这里,可以使用s转换符格式化任意的对象。对于任意实现了Formattable接口的对象,都将调用formatTo方法;否则将调用toString方法,她可以将对象转换为字符串。

3 日期

首先,给出代码示例:

import java.util.Date;

/** * @author 维C果糖 * @create 2017-03-28-上午10:20 */

public class SysDemo { 
   
    public static void main(String[] args) {
        System.out.printf("%tc", new Date());
        System.out.println();
        System.out.printf("%tF", new Date());
        System.out.println();
        System.out.printf("%tT", new Date());
        System.out.println();
        System.out.printf("%tQ", new Date());
    }
}

运行上述代码,结果如下图所示:

这里写图片描述

如上图所示,以输出第一个结果的代码为例,%tc表示输出完整的日期和时间。在这里,使用以t开始,以下表中任意字母结束的两个字母格式,此外,下面基本全部列出了关于日期与时间的转换符:

转换符 类型 举例
c 完整的日期和时间 星期二 三月 28 11:00:52 CST 2017
F ISO 8601 日期 2017-03-28
D 美国格式的日期(月/日/年) 03/28/2017
T 24 小时时间 11:00:52
r 12 小时时间 11:00:52 am
R 24 小时时间没有秒 11:00
Y 4 位数字的年(前面补 0) 2017
y 年的后两位数字(前面补 0) 17
C 年的前两位数字(前面补 0) 20
B 月的完整拼写 March
b 或者 h 月的缩写 Mar
m 两位数字的月(前面补 0) 03
d 两位数字的日(前面补 0) 28
e 两位数字的月(前面不补 0) 3
A 星期几的完整拼写 Monday
a 星期几的缩写 Mon
j 三位数中的年的日(前面补 0),在 0001 到 366 之间 087
H 两位数字的小时(前面补 0),在 0 到 23 之间 11
k 两位数字的小时(前面不补 0),在 0 到 23 之间 11
M 两位数字的分钟(前面补 0) 26
S 两位数字的秒(前面补 0) 17
L 三位数字的毫秒 413
N 九位数字的毫微秒 413000000
P 上午或下午的大写标志 AM
p 上午或下午的小写标志 am
z 从 GMT 起,RFC822 数位位移 +0800
Z 时区 CST
s 从格林威治时间 1970-01-01 00:00:00 起的秒数 1490671516
Q 从格林威治时间 1970-01-01 00:00:00 起的毫秒数 1490670052093

从上表中可以看出来,有些格式只给出了指定日期的部分信息,例如只给出月份或者日期。如果需要多次对日期操作才能实现对每一部分日期进行格式化的目的就太 low 啦!因此,咱们可以采用一个格式化的字符串,指出要被格式化的“参数索引”。索引必须紧跟在%的后面,并以$终止。例如,

System.out.printf("%1$s %2$tB %2$te %2$tY","Due Date:",new Date());

其输出结果为:

这里写图片描述

咱们可以选择使用<标志,她表示前面格式说明中的参数将被再次使用。也就是说,下面的代码将产生与前面语句同样的输出结果:

System.out.printf("%s %tB %<te %<tY","Due Date:",new Date());

提示:参数索引从 1 开始,而不是从 0 开始,%1$,表示对第 1 个参数格式化。


最后,在此给出“ 格式说明符 ”的语法规则:

这里写图片描述

内容不多,但也希望能够对大家理解格式化输出有些帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156845.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 稳压管稳压电路

    稳压管稳压电路一、稳压管稳压电路:整流滤波电路的输出电压会随着电网电压的波动而波动,随着负载电阻的变化而变化。为了获得稳定性好的直流电压,必须采取稳压措施。二、稳压原理:对于任何稳压电路而言,都应该从两方面来考虑:电网电压波动、负载变化,研究其输出电压是否稳定。(1)、电网电压波动:(2)、负载变化:…

    2022年6月20日
    22
  • 使用C#开发屏幕保护程序步骤建议收藏

    本文介绍使用C#制作屏幕保护的方法,这个屏幕保护就是仿效视窗系统自带的字幕屏保。屏幕保护程序的扩展名虽然是"scr",但其实是一个可执行的"exe"文件。但他

    2021年12月20日
    43
  • MySQL(数据类型和完整约束)

    MySQL数据类型MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。1.数值数据类型2.日期/时间类型3.字符串类型1.整数类型数值型数据类型主要用来存储数字,MY

    2022年3月29日
    35
  • js保留两位小数四舍五入_js保留两位小数不四舍五入

    js保留两位小数四舍五入_js保留两位小数不四舍五入首先我们来看2个方法:1、tofixed方法toFixed()方法可把Number四舍五入为指定小数位数的数字。但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则。银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。具体规则如下:简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。如…

    2025年6月19日
    0
  • iostat命令详解——linux性能分析[通俗易懂]

    iostat命令详解——linux性能分析[通俗易懂]之前总结uptime和free命令,今天继续来总结一下iostat。给自己留个笔记,同时也希望对大家有用。版本信息:         sysstatversion9.0.4         (C)SebastienGodard(sysstatorange.fr)基本使用:          iostat[-c][-d][-N][-n

    2022年10月6日
    0
  • ffmpeg采集摄像头数据_手机显示无法获取摄像头数据

    ffmpeg采集摄像头数据_手机显示无法获取摄像头数据这两天研究了FFmpeg获取DirectShow设备数据的方法,在此简单记录一下以作备忘。1.      列设备 ffmpeg-list_devicestrue-fdshow-idummy命令执行后输出的结果如下(注:中文的设备会出现乱码的情况):我自己的机器上列出了以下设备:[dshow@0388f5e0]DirectShowvideodevices[dshow@0388

    2022年10月12日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号