最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于String.format使用詳解

 更新時(shí)間:2025年08月15日 08:57:52   作者:ruan114514  
文章介紹了Java中String.format的使用,通過(guò)格式說(shuō)明符實(shí)現(xiàn)簡(jiǎn)潔、可維護(hù)的字符串拼接,適用于日志生成、數(shù)據(jù)格式化、編號(hào)處理等場(chǎng)景,支持靈活的格式控制與null值處理,顯著提升代碼可讀性和靈活性

在Java開(kāi)發(fā)中,我們經(jīng)常需要處理字符串拼接——比如生成日志、格式化用戶(hù)輸出、拼接訂單號(hào)或二維碼ID。你可能遇到過(guò)這樣的代碼:

String log = "用戶(hù)" + username + "在" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "登錄,IP地址是" + ip;

這種手動(dòng)拼接的方式不僅代碼冗長(zhǎng),還容易出現(xiàn)格式錯(cuò)誤(比如日期格式遺漏、空格錯(cuò)位)。而String.format作為Java提供的字符串格式化工具,能幫你用更簡(jiǎn)潔、更可維護(hù)的方式解決這些問(wèn)題。

一、什么是String.format?

String.formatjava.lang.String類(lèi)的靜態(tài)方法,用于將指定參數(shù)按照格式字符串的規(guī)則拼接成格式化字符串

其語(yǔ)法為:

String.format(String format, Object... args)
  • format:格式字符串,包含普通字符格式說(shuō)明符(如%d、%s)。
  • args:可變參數(shù)列表,用于替換格式說(shuō)明符中的占位符。

二、格式說(shuō)明符:String.format的核心

格式說(shuō)明符是String.format的“靈魂”,它定義了參數(shù)的顯示格式。其通用結(jié)構(gòu)為: %[flags][width][.precision]conversion

我們逐一拆解這些組件:

1. 轉(zhuǎn)換類(lèi)型(conversion):指定參數(shù)類(lèi)型

conversion是格式說(shuō)明符的必填部分,決定了參數(shù)的類(lèi)型和格式化方式。

常見(jiàn)類(lèi)型如下:

類(lèi)型描述示例參數(shù)示例輸出
%d格式化整數(shù)(byte/short/int/long)123"123"
%s格式化字符串(任何對(duì)象,調(diào)用toString())"Hello""Hello"
%f格式化浮點(diǎn)數(shù)(float/double)123.456"123.456000"
%c格式化字符(char)'A'"A"
%t格式化日期/時(shí)間(需后續(xù)指定子類(lèi)型)new Date()"2024-07-12"(用%tF)

2. 寬度(width):指定輸出最小長(zhǎng)度

width可選部分,表示輸出字符串的最小長(zhǎng)度。不足部分用空格指定字符(如0)填充。

示例:

  • %5d:整數(shù)占5位,不足用空格填充(123" 123")。
  • %019d:整數(shù)占19位,不足用0填充(123"0000000000000000123"

3. 標(biāo)志(flags):修改格式化行為

flags可選部分,用于調(diào)整輸出的對(duì)齊方式、填充字符等。

常見(jiàn)標(biāo)志如下:

標(biāo)志描述示例格式示例參數(shù)示例輸出
0用0填充寬度不足部分(僅適用于數(shù)值)%05d789"00789"
-左對(duì)齊(默認(rèn)右對(duì)齊)%-5s"abc""abc "(后面補(bǔ)空格)
+顯示正負(fù)號(hào)(正數(shù)也顯示+)%+d123"+123"
,用逗號(hào)分隔千位(僅適用于數(shù)值)%,d123456"123,456"

4. 精度(precision):控制小數(shù)或字符串長(zhǎng)度

precision可選部分,用于:

  • 浮點(diǎn)數(shù):指定小數(shù)點(diǎn)后的位數(shù)(如%.2f→保留兩位小數(shù))。
  • 字符串:指定最大長(zhǎng)度(如%.5s→取前5個(gè)字符)。

示例:

  • %.2f123.456"123.46"(四舍五入)。
  • %.5s"HelloWorld""Hello"(截?cái)嗲?個(gè)字符)。

三、String.format的優(yōu)勢(shì)

對(duì)比手動(dòng)拼接,String.format的優(yōu)勢(shì)一目了然:

1.代碼更簡(jiǎn)潔,可讀性更高

手動(dòng)拼接需要大量+號(hào)和轉(zhuǎn)換方法(如SimpleDateFormat),而String.format用格式字符串統(tǒng)一管理格式:

手動(dòng)拼接

String orderInfo = "訂單號(hào):" + orderId + ",金額:" 
+ new DecimalFormat("#,##0.00").format(amount) 
+ ",創(chuàng)建時(shí)間:" 
+ new SimpleDateFormat("yyyy-MM-dd").format(createTime);

用String.format

String orderInfo = String.format
("訂單號(hào):%s,金額:%,.2f,創(chuàng)建時(shí)間:%tF", orderId, amount, createTime);

后者的代碼更清晰,格式規(guī)則一目了然。

2.可維護(hù)性更強(qiáng)

如果需要調(diào)整格式(比如將金額的小數(shù)位從2位改為3位),只需修改格式字符串中的%.2f%.3f,無(wú)需修改參數(shù)部分。而手動(dòng)拼接需要修改DecimalFormat的實(shí)例,容易遺漏。

3.靈活性更高

String.format支持多種格式需求,比如:

  • 生成固定長(zhǎng)度的編號(hào)(如%019d生成19位二維碼ID)。
  • 格式化日期(如%tFyyyy-MM-dd,%tTHH:mm:ss)。
  • 處理多語(yǔ)言(結(jié)合資源束,將格式字符串放在配置文件中)。

四、String.format的常見(jiàn)使用場(chǎng)景

1.生成日志信息

日志是String.format的高頻使用場(chǎng)景,它能幫你快速生成結(jié)構(gòu)化的日志:

String log = String.format
("用戶(hù)%s在%tT登錄,IP地址是%s,操作結(jié)果:%s", username, new Date(), ip, result);
log.info(log);

輸出:

用戶(hù)admin在14:30:00登錄,IP地址是192.168.1.100,操作結(jié)果:成功

2.格式化用戶(hù)輸出

在用戶(hù)界面或API響應(yīng)中,需要將數(shù)據(jù)格式化為易讀的形式:

String userInfo = String.format("姓名:%s,年齡:%d,郵箱:%s", user.getName(), user.getAge(), user.getEmail());

輸出:

姓名:張三,年齡:25,郵箱:zhangsan@example.com

3.生成固定格式的編號(hào)

比如訂單號(hào)、二維碼ID需要固定長(zhǎng)度,用%0nd(n為長(zhǎng)度)補(bǔ)零:

long qrId = IdWorker.getId(); // 雪花算法生成唯一ID 
String formattedQrId = String.format("%019d", qrId); // 格式化為19位,不足用0填充

輸出:0000000000123456789(假設(shè)qrId為123456789)

4.處理日期時(shí)間

String.format結(jié)合%t系列格式說(shuō)明符,能快速格式化日期:

Date now = new Date(); String dateTime = String.format("當(dāng)前時(shí)間:%tF %tT", now, now); // %tF→yyyy-MM-dd,%tT→HH:mm:ss

輸出:

當(dāng)前時(shí)間:2024-07-12 14:30:00

五、進(jìn)階技巧:讓String.format更強(qiáng)大

1.處理null值

如果參數(shù)為null,%s會(huì)輸出"null",可以用Objects.toString替換為默認(rèn)值:

String name = null; String formattedName = String.format("姓名:%s", Objects.toString(name, "未知"));

輸出:

姓名:未知

2.自定義日期格式

%t系列支持更細(xì)粒度的日期格式,比如:

  • %tY:四位年份(如2024)。
  • %tm:兩位月份(如07)。
  • %td:兩位日期(如12)。
  • %tH:24小時(shí)制小時(shí)(如14)。
  • %tM:分鐘(如30)。
  • %tS:秒(如00)。
String customDateTime = String.format("當(dāng)前時(shí)間:%tY年%tm月%td日 %tH時(shí)%tM分%tS秒", now, now, now, now, now, now);

輸出:

當(dāng)前時(shí)間:2024年07月12日 14時(shí)30分00秒

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中反射的一個(gè)簡(jiǎn)單使用

    Java中反射的一個(gè)簡(jiǎn)單使用

    一直感覺(jué)Java的反射機(jī)制很強(qiáng)大,JAVA反射技術(shù)在平時(shí)我們的開(kāi)發(fā)中雖然很少會(huì)用到,但在我們所使用的框架源碼中是經(jīng)常會(huì)用到的。這篇文中就給大家介紹了關(guān)于Java中反射的一個(gè)簡(jiǎn)單使用,有需要的朋友們下面來(lái)一起看看吧。
    2016-11-11
  • java 正則表達(dá)式獲取兩個(gè)字符中間的字符串方法

    java 正則表達(dá)式獲取兩個(gè)字符中間的字符串方法

    今天小編就為大家分享一篇java 正則表達(dá)式獲取兩個(gè)字符中間的字符串方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Spring中的@EnableWebSecurity注解詳解

    Spring中的@EnableWebSecurity注解詳解

    這篇文章主要介紹了Spring中的@EnableWebSecurity注解詳解,EnableWebSecurity注解是個(gè)組合注解,它的注解中,又使用了@EnableGlobalAuthentication注解,需要的朋友可以參考下
    2023-12-12
  • 了解JAVA并發(fā)工具常用設(shè)計(jì)套路

    了解JAVA并發(fā)工具常用設(shè)計(jì)套路

    這篇文章主要介紹了了解JAVA并發(fā)工具常用設(shè)計(jì)套路,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • Java MultipartFile實(shí)現(xiàn)上傳文件/上傳圖片

    Java MultipartFile實(shí)現(xiàn)上傳文件/上傳圖片

    這篇文章主要介紹了Java MultipartFile實(shí)現(xiàn)上傳文件/上傳圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • SpringBoot利用切面注解及反射實(shí)現(xiàn)事件監(jiān)聽(tīng)功能

    SpringBoot利用切面注解及反射實(shí)現(xiàn)事件監(jiān)聽(tīng)功能

    這篇文章主要介紹了springboot事件監(jiān)聽(tīng),通過(guò)利用切面、注解、反射實(shí)現(xiàn),接下來(lái)將對(duì)這幾種方式逐一說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2022-07-07
  • mybatisplus如何實(shí)現(xiàn)排序

    mybatisplus如何實(shí)現(xiàn)排序

    這篇文章主要介紹了mybatisplus如何實(shí)現(xiàn)排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • idea創(chuàng)建SpringBoot自動(dòng)創(chuàng)建Lombok無(wú)效果的問(wèn)題解決方案

    idea創(chuàng)建SpringBoot自動(dòng)創(chuàng)建Lombok無(wú)效果的問(wèn)題解決方案

    這篇文章主要介紹了idea創(chuàng)建SpringBoot自動(dòng)創(chuàng)建Lombok無(wú)效果的問(wèn)題解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 詳解Springboot整合Dubbo之代碼集成和發(fā)布

    詳解Springboot整合Dubbo之代碼集成和發(fā)布

    本篇文章主要介紹了Springboot整合Dubbo之代碼集成和發(fā)布,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • java之Objects.nonNull用法代碼解讀

    java之Objects.nonNull用法代碼解讀

    這篇文章主要介紹了java之Objects.nonNull用法代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評(píng)論

施秉县| 太原市| 库尔勒市| 神木县| 左权县| 白城市| 许昌市| 南通市| 积石山| 贵州省| 舞钢市| 突泉县| 疏勒县| 吉首市| 神池县| 且末县| 衡东县| 镇赉县| 德江县| 东山县| 班玛县| 巫溪县| 乐亭县| 冷水江市| 河曲县| 阳东县| 西藏| 桂东县| 科技| 南城县| 佛学| 阿城市| 平顺县| 望城县| 长顺县| 星子县| 万宁市| 白河县| 漾濞| 金门县| 来宾市|