了解Java格式化输出printf,一篇就够了

了解Java格式化输出printf,一篇就够了

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

那么格式化的优点是什么了解Java格式化输出printf,一篇就够了,我认为最重要的一点就是方便了解Java格式化输出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中格式化需要用到转化符 % ,格式化以%符号开头,用相应的参数搭配替换内容。(%符号可根据理解java printf输出格式,要想输出%符号,格式需要写成这样%%

转换符 常用转换符

常用转换符实例说明:

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("我的名字是:%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    }
}

日期转换

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

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 printf输出格式,我们不必再重复去写好几遍,比如下面的写法。那么如何实现呢,Java给我们提供了相关的标志符,可以搭配转换符来使用:

代码演示:

package day_11_23;
/**
 * @author soberw
 */
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("dn",3);
        //03
        System.out.printf(".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
    }
}

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » 了解Java格式化输出printf,一篇就够了

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们