了解C语言的都知道,C语言的输出语句printf();可以对里面的内容格式化然后输出。那么在Java中也给我们提供了相关的方法。两者十分相似。注意Java中的格式化输出语句是
System.out.printf();

那么格式化的优点是什么,我认为最重要的一点就是方便,以及增加代码可读性。例如下面这两段代码:

package day_11_23;

/**
* @author soberw
*/
public class Exer {
public static void main(String[] args) {
String name = "张三";
char sex = '男';
int age = 18;
System.out.println("姓名:" + name + ",年龄:" + age + ",性别:" + sex + "。");
// 姓名:张三,年龄:18,性别:男。 System.out.printf("姓名:%s,年龄:%d,性别:%c。", name, age, sex);
// 姓名:张三,年龄:18,性别:男。
}
}

显然第二段更加美观,第一段频繁使用字符串拼接,如果数据过多,一会自己就迷了。还有就是我们在对一些特定数据进行操作时,格式化也给我们提供了很多便利。

格式化输出


其中日期转化的%tx中的x表示另外的处理日期和时间格式的转换符,它们的组合能够将日期和时间格式化成多种格式。包括如下

在Java中格式化需要用到转化符 % ,格式化以%符号开头,用相应的参数搭配替换内容。(%符号可根据\理解,要想输出%符号,格式需要写成这样%%

转换符

常用转换符

常用转换符实例说明:

package day_11_23;

/**
* @author soberw
*/
public class Printf {
public static void main(String[] args) {
//格式化输出实例
System.out.printf("我是%s,性别%c,今年%d岁%n", "张三", '男', 18);
//我是张三,性别男,今年18岁 //%n 换行类同 \n
//%s 格式化字符串
System.out.printf("我的名字是:%s\n", "张三");
//我的名字是:张三 //%d 格式化数字(十进制)
System.out.printf("张三今年%d岁%n", 18);
//张三今年18岁
//%o 格式化数字(八进制)
System.out.printf("%o%n", 63);
//77
//%x 格式化数字(十六进制)
System.out.printf("%x%n", 255);
//ff //%c 格式化字符型j (可用字符对应的ASCII码替换)
System.out.printf("%c%n", 97);
//a
System.out.printf("%c%n", 'a');
//a //%b 格式化布尔值
System.out.printf("%b%n", true);
//true //%f 格式化浮点型
//%.xf x为数字,表示要保留几位小数,如%.2f为保留两位小数(会四舍五入)
System.out.printf("%f%n", 1.555);
//1.555000
System.out.printf("%.2f",1.2555);
//1.26 }
}

日期转换

在格式化日期之前,我们必须要先获取到当前日期,或者手动设置一个日期。

package day_11_23;

import java.util.Calendar;
import java.util.Date; /**
* @author soberw
*/
public class PrintfDate {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
Date date = c.getTime(); //%tc 包括全部日期信息
System.out.printf("%tc%n", date);
//周二 11月 23 13:39:27 CST 2021 //%tF "年-月-日"格式
System.out.printf("%tF%n", date);
//2021-11-23 //%tD "月/日/年"格式
System.out.printf("%tD%n", date);
//11/23/21 //%tr "HH:MM:SS PM"格式(12小时制)
System.out.printf("%tr%n", date);
//01:43:04 下午 //%tT "HH:MM:SS"格式(24小时制)
System.out.printf("%tT%n", date);
//13:43:04 //%tR "HH:MM"格式 (24小时制)
System.out.printf("%tR%n", date);
//13:44 //%tH 小时(2位数字24小时制,不足补零)
System.out.printf("%tH%n", date);
//13 //%tI 小时(2位数字12小时制,不足补零)
System.out.printf("%tI%n", date);
//01 //%tk 小时(2位数字24小时制,不补零)
System.out.printf("%tk%n", date);
//13 //%tl 小时(2位数字12小时制,不补零)
System.out.printf("%tl%n", date);
//1 //%tM 分钟(2位数字分钟,不足补零)
System.out.printf("%tM%n", date);
//53 //%tS 秒(2位数字秒,不足补零)
System.out.printf("%tS%n", date);
//14 //%tL 毫秒(3位数字毫秒,不足补零)
System.out.printf("%tL%n", date);
//699 //%tN 毫秒(9位数字毫秒,不足补零)
System.out.printf("%tN%n", date);
//699000000 //%tp 上午或者下午
System.out.printf("%tp%n",date);
//下午 //%ts 1970-1-1 00:00:00到现在经过的秒数
System.out.printf("%ts%n",date);
//1637646987 //%tQ 1970-1-1 00:00:00到现在经过的毫秒数
System.out.printf("%tQ%n",date);
//1637646987635 //%tA 星期
System.out.printf("%tA%n",date);
//星期二
}
}

搭配标志

有了上面的演示,我们发现原来格式化输出如此好用。本来很难实现的效果比如格式化日期时间,现在只需要格式化一下就OK了,但是其实还可以更简单一下,比如下面的代码:

package day_11_23;

/**
* @author soberw
*/
public class PrintDateTime {
public static void main(String[] args) {
//举例输出:当前日期,格式为 "2021年11月23日 14:04:03 星期二"
long d = System.currentTimeMillis(); System.out.printf("%tY年%tm月%td日 %tT %tA ",d,d,d,d,d);
// 2021年11月23日 14:33:27 星期二
System.out.println();
System.out.printf("%1$tY年%1$tm月%1$td日 %1$tT %1$tA",d);
// 2021年11月23日 14:33:27 星期二
}
}

如果存在同一个数据同时格式化了好几次的情况,我们不必再重复去写好几遍,比如下面的写法。那么如何实现呢,Java给我们提供了相关的标志符,可以搭配转换符来使用:

代码演示:

package day_11_23;

/**
* @author soberw
*/
public class PrintfIdentifier {
public static void main(String[] args) {
//+ 为正数或者负数添加符号
System.out.printf("%+d,%+d\n",15,-3);
//+15,-3 //- 左对齐,后跟数字控制长度
System.out.printf("|%-5d|\n",123);
//|123 | //0 数字前面补零,后跟数字控制长度
System.out.printf("%02d\n",3);
//03
System.out.printf("%06.2f\n",1.2555);
//001.26 //空格 在整数之前添加指定数量的空格,后跟数字控制长度(空格也可省略)
System.out.printf("|% 5d|\n",99);
//| 99|
System.out.printf("|%5d|\n",99);
//| 99| //, 对数字分组,一般千位分组
System.out.printf("%,d\n",1000000);
//1,000,000
System.out.printf("%,.2f\n",1000000.00000);
//1,000,000.00 //( 用括号括住负数
System.out.printf("%(.2f\n",-33.333);
//(33.33) //# 如果是浮点数则包括小数点,如果是16进制或者8进制则添加0x或者0
System.out.printf("%#x\n",99);
System.out.printf("%#o\n",99);
System.out.printf("%#.2f\n",.233); //< 格式化前一个转换符所描述的参数,可以连写,可实现共用参数
System.out.printf("%f和%<3.2f和%<3.3f\n",99.45);
//99.450000和99.45和99.450 //$ 通过索引号获取参数,索引号从1开始,可实现共用参数(第一个可省略不写)
System.out.printf("%1$d,%1$d,%1$d\n",11);
//11,11,11
System.out.printf("%1$d,%2$d,%1$d\n",11,222);
//11,222,11
}
}

了解Java格式化输出printf,一篇就够了的更多相关文章

  1. 7.20.01 java格式化输出 printf 例子

    java格式化输出 printf 例子 importjava.util.Date; publicclassPrintf { publicstaticvoidmain(String[] args) { ...

  2. 【转】java格式化输出 printf 例子

    [转]java格式化输出 printf 例子 转自http://www.cnblogs.com/TankMa/archive/2011/08/20/2146913.html#undefined imp ...

  3. java格式化输出 printf 例子

    import java.util.Date; public class Printf { public static void main(String[] args) { // %s表示输出字符串,也 ...

  4. java 格式化输出 printf 总结

    double d = 345.678; String s = "hello!"; ; //"%"表示进行格式化输出,"%"之后的内容为格式的 ...

  5. Java面向对象 第2节 Scanner 类和格式化输出printf

    §Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 1.创建 Scanner 对象的基本语法:Scanner s = ...

  6. shell编程系列15--文本处理三剑客之awk格式化输出printf

    shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...

  7. Java格式化输出

    Java的格式化输出等同于String.Format,与C有很大的相似,比如 System.out.printf("%8.2f", x);在printf中,可以使用多个参数,例如: ...

  8. java 格式化输出方法

    在javaSE5中推出了printf方法来输出文本到控制台,在java中现在有如下方法可以输出文本: 1.System.out.println(....) //输出并换行 2.System.out.f ...

  9. 8.Java格式化输出

    JAVA中字符串输出格式 1.使用format函数 System.out.format("%d  %f",10,10.5); 2.使用Formatter类 构造函数Formatte ...

随机推荐

  1. MongoDB高级应用之高可用方案实战(4)

    1.MongDB启动与关闭 1.1.命令行启动 ./mongod --fork --dbpath=/opt/mongodb/data ----logpath=/opt/mongodb/log/mong ...

  2. 使用 SSH 隧道实现端口转发、SOCKS 代理

    SSH隧道 本地端口转发 本地客户端通过 local_port 连接到 MobaXterm: MobaXterm 绕过防火墙,使用 user 用户连接到 ssh_server_ip:ssh_serve ...

  3. DGHV同态库

    DGHV DGHV全同态方案的实现 这是具有压缩公钥的DGHV的全同态加密方案的实现,参考文章: [1] J.S. Coron, D. Naccache and M. Tibouchi, " ...

  4. python+appium运行提示找不到adb.exe “An unknown server-side error occurred while processing the command. Original error: Could not find 'adb.exe' in ["D:\\adt\\sdk;\\platform-tools\\adb.exe"”

    自己踩过的坑,不记下来就会忘掉,忘了就会不断的重复踩坑!! 重来在一台电脑上搭建了python的环境,在运行的时候,提示找不到adb.exe,看到这个问题我在想是不是我的环境变量配置有问题,我就去改了 ...

  5. Pycharm_关闭PEP8函数名不能包含大写字母的规范

    屏蔽PEP8告警 全是小写字母,可能与以往的习惯不大一样,将这样的警告忽略的方法如下: File →Settings→Editor→Inspections→Python→PEP 8 naming co ...

  6. 随机数Random 和枚举enum

    (一):生成随机数 要指定的话 需要在方法中指定最大的值 nextint(10)意思是 下一个的数是10需要导包:import java.util.Random; (二)枚举 enum    的语法和 ...

  7. 基于rabbitmq延迟插件实现分布式延迟任务

    承接上文基于redis,redisson的延迟队列实践,今天介绍下基于rabbitmq延迟插件rabbitmq_delayed_message_exchange实现延迟任务. 一.延迟任务的使用场景 ...

  8. CODING 携手 Thoughtworks 助力老百姓大药房打造”自治、自决、自动”的敏捷文化

    老百姓大药房是中国具有影响力的药品零售连锁企业,中国药品零售企业综合竞争力百强冠军.中国服务业 500 强企业.湖南省百强企业. 自 2001 年创立以来,现已成功开发了湖南. 陕西.浙江.江苏等 * ...

  9. 《剑指offer》面试题19. 正则表达式匹配

    问题描述 请实现一个函数用来匹配包含'. '和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题中,匹配是指字符串的所有字符匹配整个模式. ...

  10. Java加减乘除计算器实现

    加减乘除计算机的实现 public static void main(String[] args) { while(true) { System.out.println("依次输入要计算的2 ...