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

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

  1. package day_11_23;
  2. /**
  3. * @author soberw
  4. */
  5. public class Exer {
  6. public static void main(String[] args) {
  7. String name = "张三";
  8. char sex = '男';
  9. int age = 18;
  10. System.out.println("姓名:" + name + ",年龄:" + age + ",性别:" + sex + "。");
  11. // 姓名:张三,年龄:18,性别:男。
  12. System.out.printf("姓名:%s,年龄:%d,性别:%c。", name, age, sex);
  13. // 姓名:张三,年龄:18,性别:男。
  14. }
  15. }

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

格式化输出


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

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

转换符

常用转换符

常用转换符实例说明:

  1. package day_11_23;
  2. /**
  3. * @author soberw
  4. */
  5. public class Printf {
  6. public static void main(String[] args) {
  7. //格式化输出实例
  8. System.out.printf("我是%s,性别%c,今年%d岁%n", "张三", '男', 18);
  9. //我是张三,性别男,今年18岁
  10. //%n 换行类同 \n
  11. //%s 格式化字符串
  12. System.out.printf("我的名字是:%s\n", "张三");
  13. //我的名字是:张三
  14. //%d 格式化数字(十进制)
  15. System.out.printf("张三今年%d岁%n", 18);
  16. //张三今年18岁
  17. //%o 格式化数字(八进制)
  18. System.out.printf("%o%n", 63);
  19. //77
  20. //%x 格式化数字(十六进制)
  21. System.out.printf("%x%n", 255);
  22. //ff
  23. //%c 格式化字符型j (可用字符对应的ASCII码替换)
  24. System.out.printf("%c%n", 97);
  25. //a
  26. System.out.printf("%c%n", 'a');
  27. //a
  28. //%b 格式化布尔值
  29. System.out.printf("%b%n", true);
  30. //true
  31. //%f 格式化浮点型
  32. //%.xf x为数字,表示要保留几位小数,如%.2f为保留两位小数(会四舍五入)
  33. System.out.printf("%f%n", 1.555);
  34. //1.555000
  35. System.out.printf("%.2f",1.2555);
  36. //1.26 }
  37. }

日期转换

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

  1. package day_11_23;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. /**
  5. * @author soberw
  6. */
  7. public class PrintfDate {
  8. public static void main(String[] args) {
  9. Calendar c = Calendar.getInstance();
  10. Date date = c.getTime();
  11. //%tc 包括全部日期信息
  12. System.out.printf("%tc%n", date);
  13. //周二 11月 23 13:39:27 CST 2021
  14. //%tF "年-月-日"格式
  15. System.out.printf("%tF%n", date);
  16. //2021-11-23
  17. //%tD "月/日/年"格式
  18. System.out.printf("%tD%n", date);
  19. //11/23/21
  20. //%tr "HH:MM:SS PM"格式(12小时制)
  21. System.out.printf("%tr%n", date);
  22. //01:43:04 下午
  23. //%tT "HH:MM:SS"格式(24小时制)
  24. System.out.printf("%tT%n", date);
  25. //13:43:04
  26. //%tR "HH:MM"格式 (24小时制)
  27. System.out.printf("%tR%n", date);
  28. //13:44
  29. //%tH 小时(2位数字24小时制,不足补零)
  30. System.out.printf("%tH%n", date);
  31. //13
  32. //%tI 小时(2位数字12小时制,不足补零)
  33. System.out.printf("%tI%n", date);
  34. //01
  35. //%tk 小时(2位数字24小时制,不补零)
  36. System.out.printf("%tk%n", date);
  37. //13
  38. //%tl 小时(2位数字12小时制,不补零)
  39. System.out.printf("%tl%n", date);
  40. //1
  41. //%tM 分钟(2位数字分钟,不足补零)
  42. System.out.printf("%tM%n", date);
  43. //53
  44. //%tS 秒(2位数字秒,不足补零)
  45. System.out.printf("%tS%n", date);
  46. //14
  47. //%tL 毫秒(3位数字毫秒,不足补零)
  48. System.out.printf("%tL%n", date);
  49. //699
  50. //%tN 毫秒(9位数字毫秒,不足补零)
  51. System.out.printf("%tN%n", date);
  52. //699000000
  53. //%tp 上午或者下午
  54. System.out.printf("%tp%n",date);
  55. //下午
  56. //%ts 1970-1-1 00:00:00到现在经过的秒数
  57. System.out.printf("%ts%n",date);
  58. //1637646987
  59. //%tQ 1970-1-1 00:00:00到现在经过的毫秒数
  60. System.out.printf("%tQ%n",date);
  61. //1637646987635
  62. //%tA 星期
  63. System.out.printf("%tA%n",date);
  64. //星期二
  65. }
  66. }

搭配标志

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

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

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

代码演示:

  1. package day_11_23;
  2. /**
  3. * @author soberw
  4. */
  5. public class PrintfIdentifier {
  6. public static void main(String[] args) {
  7. //+ 为正数或者负数添加符号
  8. System.out.printf("%+d,%+d\n",15,-3);
  9. //+15,-3
  10. //- 左对齐,后跟数字控制长度
  11. System.out.printf("|%-5d|\n",123);
  12. //|123 |
  13. //0 数字前面补零,后跟数字控制长度
  14. System.out.printf("%02d\n",3);
  15. //03
  16. System.out.printf("%06.2f\n",1.2555);
  17. //001.26
  18. //空格 在整数之前添加指定数量的空格,后跟数字控制长度(空格也可省略)
  19. System.out.printf("|% 5d|\n",99);
  20. //| 99|
  21. System.out.printf("|%5d|\n",99);
  22. //| 99|
  23. //, 对数字分组,一般千位分组
  24. System.out.printf("%,d\n",1000000);
  25. //1,000,000
  26. System.out.printf("%,.2f\n",1000000.00000);
  27. //1,000,000.00
  28. //( 用括号括住负数
  29. System.out.printf("%(.2f\n",-33.333);
  30. //(33.33)
  31. //# 如果是浮点数则包括小数点,如果是16进制或者8进制则添加0x或者0
  32. System.out.printf("%#x\n",99);
  33. System.out.printf("%#o\n",99);
  34. System.out.printf("%#.2f\n",.233);
  35. //< 格式化前一个转换符所描述的参数,可以连写,可实现共用参数
  36. System.out.printf("%f和%<3.2f和%<3.3f\n",99.45);
  37. //99.450000和99.45和99.450
  38. //$ 通过索引号获取参数,索引号从1开始,可实现共用参数(第一个可省略不写)
  39. System.out.printf("%1$d,%1$d,%1$d\n",11);
  40. //11,11,11
  41. System.out.printf("%1$d,%2$d,%1$d\n",11,222);
  42. //11,222,11
  43. }
  44. }

了解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. 巅峰对决!Spring Boot VS .NET 6

    原文作者:Putu Prema 原文链接: https://medium.com/@putuprema/spring-boot-vs-asp-net-core-a-showdown-1d38b89c6 ...

  2. Swoole 中使用异步任务

    执行异步任务 (Task) # server.php $serv = new Swoole\Server("127.0.0.1", 9501); // 设置异步任务的工作进程数量 ...

  3. mysql编译报错

    1.make报错现象 Warning: Bison executable not found in PATH 解决办法 yum -y install bison 2.make报错现象 ake Erro ...

  4. Selenium_使用switch_to.frame处理网页框架切换(13)

    与在新窗口打开一个网页后需要切换窗口才能定位元素一样,在iframe标签中的元素也不能直接定位,需要切换到对应的iframe框架中才能进行元素定位. 完成网页框架切换操作需要用selenium中的两个 ...

  5. 实验 7 : OpenDaylight 实验 —— Python 中的 REST API 调用

    实验 7 : OpenDaylight 实验 -- Python 中的 REST API 调用 一.实验 目的 对 Python 调用 OpenDaylight 的 REST API 方法有初步了解. ...

  6. 小程序云开发请求第三方http或https接口

    1.新建http云函数,选中http云函数,右键,打开终端,安装依赖: npm install request-promise 2.http.js引入request-promise用于做网络请求 va ...

  7. 浅谈xss漏洞

    0x00 xss漏洞简介 XSS漏洞是Web应用程序中最常见的漏洞之一.如果您的站点没有预防XSS漏洞的固定方法, 那么很可能就存在XSS漏洞. 跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Scr ...

  8. markdown mermaid序列图

    序列图(时序图) 序列图是一种交互图,它显示了进程如何相互操作以及按什么顺序操作. sequenceDiagram participant l as 大灰狼 participant y as 小羊 l ...

  9. Julia语言介绍

    官网:https://julialang.org/ 中文社区:https://cn.julialang.org/ Julia 是一个面向科学计算的高性能动态高级程序设计语言. 首先定位是通用编程语言, ...

  10. dgv 自动换行

    //设置自动换行 dgv.DefaultCellStyle.WrapMode = DataGridViewTriState.True; //设置自动调整高度 dgv.AutoSizeRowsMode ...