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

Java格式化輸出printf()解讀

 更新時間:2023年09月29日 08:45:26   作者:RiskAI  
這篇文章主要介紹了Java格式化輸出printf()解讀,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

本文通過實例詳細介紹Java格式化輸出 System.out.printf() 方法的使用、參數(shù)的含義、格式轉(zhuǎn)換符使用時的注意事項。

1. printf API

// 使用指定的格式字符串和參數(shù)將格式化字符串寫入入到輸出流
public PrintStream printf(String format, Object ... args)
// 基于本地化環(huán)境使用指定的格式字符串和參數(shù)將格式化字符串寫入到輸出流
public PrintStream printf(Locale l, String format, Object ... args)

以上2個方法,當(dāng) format 為 null 時,拋出 NPE.

2. 參數(shù)說明

format

format 是以百分號(%) 開頭的格式說明字符串,具體格式如下

 %[argument_index$][flags][width][.precision]conversion

img-01

可選的 argument_index 是十進制整數(shù),表示參數(shù)列表中參數(shù)的位置。 第一個參數(shù)由“ 1$ ”引用,第二個由“ 2$ ” 引用 ,等等。 argument_index 必須緊跟 % 后面,并以 $ 結(jié)束。

note: 參數(shù)索引值從1開始,而不是從0開始, %1$ 對第一個參數(shù)格式化。這就避免了與0標志混淆。

可選 flags 指定格式化輸出外觀的各種標志。 有效標志集取決于 conversion。

可選 width是正十進制整數(shù),表示要寫入到輸出的字符個數(shù)(注意對于浮點數(shù):也包含小數(shù)點所占的1個字和 負數(shù)的負號所占的1個字符)。 當(dāng)實際字符數(shù)小于指定的寬度時,最前面用 flags 指定的標志填充(若未指定,默認用空格)。

eg: v=2.3, %5.2f 輸出 5.20 ,且前面包含1個空格。共打印5個字符,整數(shù)位1個5,1個小數(shù)點,2個精度,長度為4,比指定的寬度少1為,用1個前導(dǎo)空格代替。

可選 precision 是一個非負十進制整數(shù),通常用于限制字符數(shù)。 具體行為取決于轉(zhuǎn)換。

conversion (必需) 是一個字符,指示如何格式化參數(shù)。 給定參數(shù)的有效轉(zhuǎn)換集取決于參數(shù)的數(shù)據(jù)類型。

  • 表1-用于printf flags(標志) 說明
標志目的示例
+打印正數(shù)和負數(shù)的符號+3333.33
空格在正數(shù)之前添加空格| 3333.33|
0數(shù)字前面補0003333.33
-左對齊(不指定-時,默認為右對齊)|3333.33 |
(將負數(shù)括在括號內(nèi)%d,-90輸出(90)
,(英文逗號)添加分組分隔符,只對定點浮點數(shù)整數(shù)部分添加分組分隔符,小數(shù)部分不會添加3,333.33
#(對于f格式)包含小數(shù)點3,333.
#(對于x或o格式)添加前綴0x或00xcafe
$指定要格式化的參數(shù)索引。例如,%1 d d %1 dx 將以十進制和十六進制格式打印第1個參數(shù)159 9F
<<格式化前面說明的數(shù)值。例如, %d<%x 將以十進制和十六進制打印同一個值159 9F
  • 表2-用于printf conversion(轉(zhuǎn)換符) 說明
轉(zhuǎn)換符類型示例轉(zhuǎn)換符類型示例
d十進制整數(shù)159s字符串hello
x十六進制整數(shù)9fc字符H
o八進制整數(shù)237b布爾true
f定點浮點數(shù)1.59e+01h散列碼42628b2
e指數(shù)浮點數(shù)tx或Yx日期時間(T強制大寫)已經(jīng)過時,應(yīng)當(dāng)改為使用 java.time 類。
g通用浮點數(shù)(e和f中較短的一個)——%百分號%
a16進制浮點數(shù)0x1.fccdp3n與平臺有關(guān)的換行符——

補充1: 使用 s 轉(zhuǎn)換符格式化任意的對象

可以使用 s 轉(zhuǎn)換符格式化任意的對象。 對于實現(xiàn)了 Formattable 接口的任意對象,將調(diào)用這個對象的 formatTo 方法;否則調(diào)用 toString 方法將這個對象轉(zhuǎn)換為字符串。

補充2: String.format()

使用 String.format() 方法可創(chuàng)建一個格式化的字符串,而不打印輸出。

API:

public static String format(String format, Object... args)
public static String format(Locale l, String format, Object... args)   

參數(shù)和 printf() 中的含義相同。

表3-日期和時間的轉(zhuǎn)換符

Note: 以下格式符已經(jīng)過時,對于新的代碼,應(yīng)當(dāng)使用 java.time 包的方法。

eg:

System.out.printf("%tc",new Date()); 

這條語句將用下面的格式打印當(dāng)前的日期和時間:

Mon Feb 09 18:05:19 PST 2015

下面的轉(zhuǎn)換符前面都必須用 t/T 修飾。

轉(zhuǎn)換符類型示例
c完整的日期和時間Mon Feb 09 18:05:19 PST 2015
FISO 8601日期2015/2/9
D美國格式的日期(月/日/年)02/09/2015
T24小時時間18:05:19
r12小時時間6:05:19
R24小時時間,沒有秒18:05
Y4位數(shù)字的年(前面補02015
y年的后兩位數(shù)字(前面補0)15
C年的前兩位數(shù)字(前面補0)20
B月的完整拼寫February
b或h月的縮寫Feb
m兩位數(shù)字的月(前面補0)02
d兩位數(shù)字的日(前面補0)09
e兩位數(shù)字的日(前面不補09
A星期幾的完整拼寫Monday
a星期幾的縮寫Mon
j三位數(shù)的年中第幾天(前面補0),在001到366之間069
H兩位數(shù)字的小時(前面補0),在0到23之間18
k兩位數(shù)字的小時(前面不補0),在0到23之間18
I兩位數(shù)字的小時(前面補0),在01到12之間06
l兩位數(shù)字的小時(前面不補0),在1到12之間6
M兩位數(shù)字的分鐘(前面補0)05
S兩位數(shù)字的秒(前面補0)19
L三位數(shù)字的毫秒(前面補0)047
N九位數(shù)字的毫微秒(前面補0)047000000
p上午或下午的標志pm
z從 GMT 起,RFC 822 數(shù)字位移-800
Z時區(qū)PST
s從格林尼治時間 1970-01-01 00:00:00 起的秒數(shù)1078884319
Q從格林尼治時間 1970-01-01 00:00:00 起的毫秒數(shù)1078884319047

從上表可以看到,某些格式只給出了指定日期的部分信息。

例如,只有日期或月份。如果需要多次提供日期來分別格式化每一部分就太笨拙了。

為此,可以用一個格式字符串指示要格式化的參數(shù)索引。

索引必須緊跟在%后面,并以$終止。

例如,

System.out.printf("%1$s %2$tB %2$te, %2$tY","Due date:",new Date());

會打印

Due date: February 9, 2015

還可以選擇使用<標志。它指示前面格式說明中的參數(shù)將被再次使用。也就是說,以下語句將產(chǎn)生與前面語句同樣的輸出結(jié)果:

System.out.printf("%1$s %tB %<te, %<tY","Due date:",new Date());

args

args : 格式字符串中格式說明符引用的參數(shù)。

如果參數(shù)多于格式說明符,則忽略額外參數(shù)。

參數(shù)的數(shù)量是可變的,可以為零。

參數(shù)的最大數(shù)量受The Java Virtual Machine Specification(java虛擬機規(guī)范)定義的Java數(shù)組的最大維數(shù)限制。

null參數(shù)上的行為取決于 conversion(轉(zhuǎn)換符) 。

locale

數(shù)字和日期的格式化規(guī)則是特定于本地化環(huán)境的。

例如,在德國,分組分隔符是點號而不是逗號,另外 Monday被格式化為 Montag。

locale主要用于如何控制應(yīng)用的國際化行為。

3.printf 使用實例

// +199 199 c7 307 0xc7 0307
System.out.printf("%+d %<d %<x %<o %<#x %<#o\n",199);
// | 23| |23|
System.out.printf("|% d| |%<d|\n",23);
// hello 第5個字符是o,that's true
System.out.printf("%s 第%d個字符是%c,that's %b\n","hello",5,'o',true);
// 15 % 6 = 3
System.out.printf("%2$d %% %1$d = %3$d\n",6,15, 15 % 6);
// |  7.33| |007.33| |7.330000| 0x1.d51eb851eb852p2
System.out.printf("|%6.2f| |%0<6.2f| |%<f| %<a\n",7.33);
// | 211.79| |211.79 |
System.out.printf("|%7.2f| |%<-7.2f|\n",211.79);
// | -211.79| |(211.79)| |(-211.79)|
System.out.printf("|%8.2f| |%<(8.2f| |(%<.2f)|\n",-211.79);
// |-21171.3333| |-21,171.3333| |-2.1171e+04| |-2.117e+04|
System.out.printf("|%.4f| |%<,.4f| |%<.4e| |%<.4g|\n",-21171.3333);
String str = new String("tree");
// Note: %h 格式符輸出對象的散列碼 和 調(diào)用對象的hashCode 得到的值并不相同
// obj %h formatinput: 36739e,hashCode:3568542
System.out.printf("obj %%h formatinput: %h,hashCode:%s\n",str,str.hashCode());
// true 25 0.0032 含
System.out.printf("%s %s %s %s\n",true,25,3.2e-3,'含');
System.out.printf("|%n| \n","world");
System.out.printf("|%n| \n");

輸出

+199 199 c7 307 0xc7 0307
| 23| |23|
hello 第5個字符是o,that's true
15 % 6 = 3
|  7.33| |007.33| |7.330000| 0x1.d51eb851eb852p2
| 211.79| |211.79 |
| -211.79| |(211.79)| |(-211.79)|
|-21171.3333| |-21,171.3333| |-2.1171e+04| |-2.117e+04|
obj %h formatinput: 36739e,hashCode:3568542
true 25 0.0032 含
|

|

關(guān)于printf 轉(zhuǎn)換符使用的注意事項

  • 適用于浮點類型轉(zhuǎn)換符(e,g,a,f)不能用于整形; 同樣適用于整形的轉(zhuǎn)換符(d,o,x)不能用于浮點型。
  • 可以使用 s 轉(zhuǎn)換符格式化任意的對象。對于實現(xiàn)了 Formattable 接口的任意對象,將調(diào)用這個對象的 formatTo 方法;否則調(diào)用 toString 方法將這個對象轉(zhuǎn)換為字符串。

eg:

// test in jdk 8,11,14
// Exception in thread "main" java.util.IllegalFormatConversionException: o != java.lang.Float
System.out.printf("%o\n",2.3f);
// Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.Integer
System.out.printf("%f\n",25);

總結(jié)

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

相關(guān)文章

  • 基于rocketmq的有序消費模式和并發(fā)消費模式的區(qū)別說明

    基于rocketmq的有序消費模式和并發(fā)消費模式的區(qū)別說明

    這篇文章主要介紹了基于rocketmq的有序消費模式和并發(fā)消費模式的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實現(xiàn)求解一元n次多項式的方法示例

    Java實現(xiàn)求解一元n次多項式的方法示例

    這篇文章主要介紹了Java實現(xiàn)求解一元n次多項式的方法,涉及java高斯消元法處理矩陣運算解多項式的相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • java中Arthas的作用和使用方式

    java中Arthas的作用和使用方式

    Arthas 是由阿里巴巴開源的 Java 診斷工具,主要用于在生產(chǎn)環(huán)境中診斷和解決 Java 應(yīng)用問題,它提供實時監(jiān)控、類信息查看、動態(tài)追蹤、條件表達式斷點等功能,支持非侵入式設(shè)計和高擴展性,通過 Arthas,開發(fā)者可以在不停止應(yīng)用的情況下,快速定位和解決問題
    2025-01-01
  • Spring Boot 2.7.8 原生 SSE 服務(wù)端開發(fā)實戰(zhàn)指南

    Spring Boot 2.7.8 原生 SSE 服務(wù)端開發(fā)實戰(zhàn)指南

    在Spring Boot 2.7.8版本中,我們可以利用其原生支持,輕松實現(xiàn)SSE服務(wù),從而為應(yīng)用提供實時數(shù)據(jù)推送能力,本文給大家介紹Spring Boot 2.7.8 原生 SSE 服務(wù)端開發(fā)實戰(zhàn)指南,感興趣的朋友一起看看吧
    2026-04-04
  • 詳解Java反射各種應(yīng)用

    詳解Java反射各種應(yīng)用

    Java除了給我們提供在編譯期得到類的各種信息之外,還通過反射讓我們可以在運行期間得到類的各種信息。通過反射獲取類的信息,得到類的信息之后,就可以獲取很多相關(guān)內(nèi)容。下面跟著小編一起來看下吧
    2017-01-01
  • JFinal 調(diào)用存儲過程的步驟

    JFinal 調(diào)用存儲過程的步驟

    這篇文章主要介紹了JFinal 調(diào)用存儲過程的步驟,幫助大家更好的理解和學(xué)習(xí)使用JFinal,感興趣的朋友可以了解下
    2021-03-03
  • springboot2.0使用Hikari連接池的方法(替換druid)

    springboot2.0使用Hikari連接池的方法(替換druid)

    這篇文章主要介紹了springboot 2.0使用Hikari連接池的方法(替換druid),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • spring boot輸入數(shù)據(jù)校驗(validation)的實現(xiàn)過程

    spring boot輸入數(shù)據(jù)校驗(validation)的實現(xiàn)過程

    web項目中,用戶的輸入總是被假定不安全不正確的,在被處理前需要做校驗。本文介紹在spring boot項目中實現(xiàn)數(shù)據(jù)校驗的過程,通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-09-09
  • HttpServletRequestWrapper干預(yù)Request處理流程解析

    HttpServletRequestWrapper干預(yù)Request處理流程解析

    這篇文章主要分析在?Tomcat的處理?http?請求的流程中干預(yù)?Request對象,?通過基于HttpServletRequestWrapper和?Filter組合進行干預(yù),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-09-09
  • SpringBoot如何獲取圖片的寬高

    SpringBoot如何獲取圖片的寬高

    本文介紹了Java中獲取圖片寬高尺寸的三種方法:使用BufferedImage、Image類和更底層的字節(jié)流方式,BufferedImage和Image類適用于大多數(shù)情況,而字節(jié)流方式則適用于特定格式的高性能場景,感興趣的朋友跟隨小編一起看看吧
    2025-11-11

最新評論

稻城县| 那曲县| 晋中市| 屏东县| 雷波县| 武功县| 潜山县| 龙陵县| 聂荣县| 桦甸市| 嘉鱼县| 五指山市| 遵义县| 抚州市| 鄯善县| 惠安县| 墨脱县| 贺州市| 武隆县| 达尔| 临海市| 巴南区| 石阡县| 平南县| 镇平县| 东阳市| 霍州市| 涿州市| 哈尔滨市| 高淳县| 中卫市| 闸北区| 墨竹工卡县| 中阳县| 永安市| 嘉鱼县| 通州区| 佛冈县| 舞钢市| 邓州市| 万年县|