- 格式化输出
- 转换符
- 常用转换符
- 日期转换
- 搭配标志
了解C语言的都知道,C语言的输出语句printf();可以对里面的内容格式化然后输出。那么在Java中也给我们提供了相关的方法。两者十分相似。注意Java中的格式化输出语句是 System.out.printf();
那么格式化的优点是什么,我认为最重要的一点就是方便,以及增加代码可读性。例如下面这两段代码:
package day_11_23; 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; public class Printf { public static void main(String[] args) { //格式化输出实例 System.out.printf("我是%s,性别%c,今年%d岁%n", "张三", '男', 18); //我是张三,性别男,今年18岁 //%n 换行类同 n //%s 格式化字符串 System.out.printf("我的名字是:%sn", "张三"); //我的名字是:张三 //%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; 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; 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; public class PrintfIdentifier { public static void main(String[] args) { //+ 为正数或者负数添加符号 System.out.printf("%+d,%+dn",15,-3); //+15,-3 //- 左对齐,后跟数字控制长度 System.out.printf("|%-5d|n",123); //|123 | //0 数字前面补零,后跟数字控制长度 System.out.printf("%02dn",3); //03 System.out.printf("%06.2fn",1.2555); //001.26 //空格 在整数之前添加指定数量的空格,后跟数字控制长度(空格也可省略) System.out.printf("|% 5d|n",99); //| 99| System.out.printf("|%5d|n",99); //| 99| //, 对数字分组,一般千位分组 System.out.printf("%,dn",1000000); //1,000,000 System.out.printf("%,.2fn",1000000.00000); //1,000,000.00 //( 用括号括住负数 System.out.printf("%(.2fn",-33.333); //(33.33) //# 如果是浮点数则包括小数点,如果是16进制或者8进制则添加0x或者0 System.out.printf("%#xn",99); System.out.printf("%#on",99); System.out.printf("%#.2fn",.233); //< 格式化前一个转换符所描述的参数,可以连写,可实现共用参数 System.out.printf("%f和%<3.2f和%<3.3fn",99.45); //99.450000和99.45和99.450 //$ 通过索引号获取参数,索引号从1开始,可实现共用参数(第一个可省略不写) System.out.printf("%1$d,%1$d,%1$dn",11); //11,11,11 System.out.printf("%1$d,%2$d,%1$dn",11,222); //11,222,11 } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)