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

Java字符串格式化Formatter和printf()的使用詳解

 更新時間:2025年05月01日 10:22:36   作者:面朝大海,春不暖,花不開  
這篇文章主要介紹了Java字符串格式化Formatter和printf()的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在 Java 編程中,字符串格式化是一項基本且重要的技能。它允許開發(fā)者以特定的方式將各種類型的數(shù)據(jù)(如數(shù)字、日期、字符串等)轉換為字符串,以便于顯示、存儲或傳輸。

Java 提供了多種方法來實現(xiàn)字符串格式化,其中最常用的是 String.format()、Java 15 引入的 string.formatted() 實例方法,以及 PrintStreamPrintWriter 類中的 printf() 方法。

這些方法都依賴于 java.util.Formatter 類,該類使用類似于 C 語言 printf() 函數(shù)的格式代碼。

字符串格式化的方法

Java 提供了三種主要的字符串格式化方法,每種方法都有其特定的使用場景:

1.String.format()

這是一個靜態(tài)方法,用于創(chuàng)建一個格式化的字符串。它接受一個格式字符串和一系列參數(shù),返回一個格式化后的字符串。適用于需要將格式化結果存儲為字符串的場景。

示例:

String str = String.format("Hello %s, today is %tF%n", "World", LocalDate.now());
System.out.println(str);

輸出示例:

Hello World, today is 2025-04-27

2.string.formatted()

從 Java 15 開始,字符串實例提供了一個 formatted() 方法,可以直接對字符串進行格式化。其功能與 String.format() 類似,但語法更簡潔,適合需要快速格式化的場景。

示例:

String str = "Hello %s, today is %tF%n".formatted("World", LocalDate.now());
System.out.println(str);

輸出示例:

Hello World, today is 2025-04-27

3.printf()

PrintStreamPrintWriter 類提供了 printf() 方法,可以直接將格式化的字符串輸出到流中(如控制臺或文件)。它適合需要立即輸出的場景。

示例:

System.out.printf("Hello %s, today is %tF%n", "World", LocalDate.now());

輸出示例:

Hello World, today is 2025-04-27

格式字符串的結構

格式字符串由普通字符和格式代碼組成。普通字符按原樣輸出,而格式代碼以 % 開頭,用于指定如何格式化參數(shù)。格式代碼的完整結構如下:

% [argument_index$] [flags] [width] [.precision] conversion
  • argument_index$:可選,指定要格式化的參數(shù)索引(從 1 開始)。例如,%1$s 表示第一個參數(shù)作為字符串。
  • flags:可選,控制輸出格式,如 - 表示左對齊,0 表示用 0 填充。
  • width:可選,指定字段的最小寬度。
  • .precision:可選,對于浮點數(shù),指定小數(shù)點后位數(shù);對于字符串,指定最大字符數(shù)。
  • conversion:必須,指定數(shù)據(jù)類型,如 d(十進制整數(shù))、f(浮點數(shù))、s(字符串)等。

例如,%04d 表示將整數(shù)格式化為至少 4 位,不足時前面補 0;%4.2f 表示浮點數(shù)總寬度至少 4 位,小數(shù)點后 2 位。

常用格式代碼

以下是 java.util.Formatter 類支持的一些常用格式代碼:

格式代碼含義
%b布爾值(true 或 false)
%c字符
%d十進制整數(shù)(無小數(shù)點)
%f浮點數(shù)(帶小數(shù)部分)
%s字符串(通用格式)
%t日期/時間(需后跟具體代碼)
%n平臺相關的換行符
%%字面上的 % 字符

對于某些代碼(如 %b%c、%s),使用大寫形式(如 %S)會將結果轉換為大寫。

日期和時間格式化

日期和時間格式化使用 %t 前綴,后跟一個字符來指定具體格式。

以下是一些常用的日期/時間格式代碼:

格式代碼含義
%tA星期幾的完整名稱(如“星期日”)
%ta星期幾的縮寫名稱(如“周日”)
%tB月份的完整名稱(如“一月”)
%tb月份的縮寫名稱(如“一月”)
%td月份中的天(兩位數(shù),如“01”)
%tY年份(至少四位,如“2025”)
%tFISO 8601 日期格式(YYYY-MM-DD)

日期格式化通常與 LocalDate、DateCalendar 等對象一起使用。

需要注意的是,當對同一日期對象格式化多個字段時,必須為每個格式代碼指定參數(shù)索引(如 %1$tY)。

代碼示例

以下是一些實際應用中的格式化示例,涵蓋數(shù)字、字符串和日期。

1. 格式化數(shù)字

System.out.printf("%04d - the year of %f%n", 1956, Math.PI);
  • 輸出:1956 - the year of 3.141593
  • 說明:%04d 確保年份顯示為 4 位,前面補 0;%f 顯示浮點數(shù) Math.PI 的完整值。

2. 控制浮點數(shù)精度

System.out.printf("PI is approximately %4.2f%n", Math.PI);
  • 輸出:PI is approximately 3.14
  • 說明:%4.2f 指定浮點數(shù)總寬度至少 4 位,小數(shù)點后保留 2 位。

3. 格式化日期

LocalDate today = LocalDate.now();
System.out.printf("Today is %1$tB %1$td, %1$tY%n", today);
  • 輸出示例:Today is April 27, 2025
  • 說明:%1$tB 顯示月份名稱,%1$td 顯示日期,%1$tY 顯示年份,1$ 確保使用同一個 LocalDate 對象。

4. 使用參數(shù)索引重復格式化

System.out.printf("%1$tY-%1$tm-%1$td%n", LocalDate.now());
  • 輸出示例:2025-04-27
  • 說明:通過 1$ 指定使用第一個參數(shù)(LocalDate.now()),分別提取年、月、日。

5. 寫入文件

try (Formatter formatter = new Formatter("output.txt")) {
    formatter.format("Price: $%5.2f%n", 27.99);
}

說明:將格式化結果寫入文件 output.txt,內(nèi)容為 Price: $27.99。

最佳實踐和注意事項

  • 安全性:避免使用用戶提供的格式字符串,因為格式字符串可能被惡意構造,導致安全漏洞。例如,攻擊者可能利用格式代碼訪問不應訪問的數(shù)據(jù)。始終對用戶輸入進行驗證和清理。
  • 國際化:在多語言應用中,直接使用日期格式代碼(如 %tB)可能不適合所有地區(qū),因為不同語言對日期的顯示順序和格式有不同要求。建議使用 java.time.format.DateTimeFormatter 來處理國際化日期格式化。
  • 平臺無關性:使用 %n 作為換行符,而不是硬編碼 \n,因為 %n 會根據(jù)運行平臺自動選擇正確的換行符。
  • 性能:對于高性能場景,避免頻繁創(chuàng)建 Formatter 對象。可以復用 Formatter 實例或直接使用 String.format()printf()

關于 StringTemplate 的說明

Java 21 和 22 引入了 StringTemplate 作為預覽功能,旨在提供更簡潔的字符串插值方式,例如 STR."Hello \{name}"。然而,由于設計上的問題,該功能在 Java 23 中被撤回。根據(jù) Java StringTemplate Discussion,開發(fā)團隊正在探索更安全和優(yōu)雅的實現(xiàn)方案,但目前尚無明確的時間表。

總結

Java 的字符串格式化工具通過 Formatter 類及其相關方法,為開發(fā)者提供了強大的數(shù)據(jù)格式化能力。無論是格式化數(shù)字、字符串還是日期,String.format()、string.formatted()printf() 都能滿足各種需求。通過掌握格式代碼的結構和用法,開發(fā)者可以編寫更清晰、更高效的代碼。然而,在使用時需注意安全性和國際化問題,以確保代碼的健壯性和可移植性。

格式代碼種類繁多,本文僅介紹了最常用的部分。欲了解完整列表,請參閱 Java Formatter Documentation

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

相關文章

  • Springboot解決跨域問題方案總結(包括Nginx,Gateway網(wǎng)關等)

    Springboot解決跨域問題方案總結(包括Nginx,Gateway網(wǎng)關等)

    跨域問題是瀏覽器為了保護用戶的信息安全,實施了同源策略(Same-Origin?Policy),即只允許頁面請求同源(相同協(xié)議、域名和端口)的資源,本文給大家總結了Springboot解決跨域問題方案包括Nginx,Gateway網(wǎng)關等),需要的朋友可以參考下
    2024-03-03
  • Spring中@Primary注解的作用與使用

    Spring中@Primary注解的作用與使用

    本文主要介紹了Spring中@Primary注解的作用與使用,@Primary?注解用于解決依賴注入時的歧義性問題,具有一定的參考價值,感興趣的可以了解一下
    2025-06-06
  • 簡單談談ThreadPoolExecutor線程池之submit方法

    簡單談談ThreadPoolExecutor線程池之submit方法

    下面小編就為大家?guī)硪黄唵握務凾hreadPoolExecutor線程池之submit方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java實現(xiàn)單線程聊天室

    Java實現(xiàn)單線程聊天室

    這篇文章主要為大家詳細介紹了Java實現(xiàn)單線程聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Nacos源碼之注冊中心的實現(xiàn)詳解

    Nacos源碼之注冊中心的實現(xiàn)詳解

    這篇文章主要為大家介紹了Nacos源碼之注冊中心的實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • spring mvc 使用kaptcha配置生成驗證碼實例

    spring mvc 使用kaptcha配置生成驗證碼實例

    本篇文章主要介紹了spring mvc 使用kaptcha生成驗證碼實例,詳細的介紹了使用Kaptcha 生成驗證碼的步驟,有興趣的可以了解一下
    2017-04-04
  • Java中tomcat memecached session 共享同步問題的解決辦法

    Java中tomcat memecached session 共享同步問題的解決辦法

    這篇文章主要介紹了Java中tomcat memecached session 共享同步問題的解決辦法的相關資料,需要的朋友可以參考下
    2015-10-10
  • Java創(chuàng)建對象的常見方式技術指南

    Java創(chuàng)建對象的常見方式技術指南

    在?Java?開發(fā)中,對象是一切面向對象編程的基礎,Java?提供了多種方式來創(chuàng)建對象,不同方式背后有不同的應用場景與運行機制,下面哦我們就來深入了解下吧
    2025-06-06
  • springboot @ConfigurationProperties和@PropertySource的區(qū)別

    springboot @ConfigurationProperties和@PropertySource的區(qū)別

    這篇文章主要介紹了springboot @ConfigurationProperties和@PropertySource的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot詳解執(zhí)行過程

    SpringBoot詳解執(zhí)行過程

    這篇文章主要介紹了SpringBoot的執(zhí)行過程原理,Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-07-07

最新評論

封开县| 沙湾县| 会理县| 兰州市| 临夏县| 万载县| 银川市| 铜川市| 叶城县| 饶平县| 秀山| 萨嘎县| 宾川县| 武山县| 河津市| 馆陶县| 保康县| 巴楚县| 木兰县| 赫章县| 泽库县| 娱乐| 利川市| 大英县| 河西区| 永济市| 启东市| 长沙县| 马鞍山市| 满洲里市| 铜陵市| 红安县| 平邑县| 岱山县| 介休市| 白河县| 柳州市| 靖宇县| 洛隆县| 新密市| 嘉黎县|