




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.java.text.Format21.1.Format的方法21.2.Format的子類21.3.DateFormat的用法21.4.MessageFormat的用法21.5.NumberFormat的用法31.5.1.NumberFormat的介紹31.5.2.子類DecimalFormat31.5.3.子類ChoiceFormat31.5.4.ChoiceFormat的例子31.5.5.ChoiceFormat的pattern構(gòu)造方法41.5.6.其它的數(shù)字格式化42.java.util.Formatter52.1.介紹52.2.轉(zhuǎn)換(conversion)52.2.1.常規(guī)52.2.
2、2.字符62.2.3.整數(shù)62.2.4.浮點(diǎn)62.2.5.日期/時(shí)間62.2.6.百分比62.2.7.行分隔符62.3.標(biāo)志(flags)62.4.寬度(width)62.5.精度(.precision)63.java.util.regex.Pattern73.1.介紹73.2.關(guān)于regex73.3.Matcher(匹配器)71 / 11在Java中,有java.text.Format, java.util.Formatter, java.util.regex.Pattern三個(gè)格式化相關(guān)的體系,使用起來較為復(fù)雜,在這里總結(jié)一下。1. java.text.Format1.1. Format的
3、方法java.text.Format做為一個(gè)抽象類,有二個(gè)抽象方法,format(Object obj, StringBuffer toAppendTo, FieldPosition pos):格式化一個(gè)對(duì)象,并將得到的文本追加到給定的字符緩沖區(qū)。是將obj格式化為字符串,并加入到toAppendTo中。parseObject(String source, ParsePosition pos): 分析字符串文本,生成一個(gè)對(duì)象。是format方法的逆向方法,將String轉(zhuǎn)化為Object。另外的format和parseObject這兩個(gè)方法的重載。方法formatToCharacterIter
4、ator(Object obj)并非抽象方法,api上要求子類必須實(shí)現(xiàn)這個(gè)方法。1.2. Format的子類Java 2 平臺(tái)為格式化日期、消息和數(shù)字分別提供了三個(gè)特殊的 Format 的子類:DateFormat(抽象類)、MessageFormat 和 NumberFormat(抽象類)。 >DateFormat >SimpleDateFormatFormat >MessageFormat>NumberFormat>ChoiceFormat > DecimalFormat用于格式化十進(jìn)制數(shù)字1.3. DateFormat的用法DateFormat 是日期
5、/時(shí)間格式化子類的抽象類, 有一些static的get*Instance()方法來獲得實(shí)例。通過設(shè)置結(jié)果的長(zhǎng)度和地區(qū),來獲得日期,時(shí)間等的格式formatter。不太常用。一般會(huì)使用SimpleDateFormat子類,new SimpleDateFormat("yyyy-MM-dd")或new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),來獲得常用的時(shí)間格式。DateFormat 的get*Instance()方法一般也是獲得SimpleDateFormat??碊ateFormat的源代碼有個(gè)疑問,如果繼承了Date
6、Format類,那DateFormat. get*Instance()的方法還是返回SimpleDateFormat? DateFormat.get是私有的,也不能覆蓋。DateFormat類中還有一些static的字段,如WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD。api上說在FieldPosition中使用,用于對(duì)齊。java.util.Calendar也是日期操作相關(guān)的類,實(shí)現(xiàn)類為GregorianCalendar。主要對(duì)日期進(jìn)行操作。注意add方法和roll方法的區(qū)別,roll方法不更改更大的字段。還有一些靜態(tài)的變量DAY_OF_MONTH,DAY_
7、OF_WEEK等,在get/set/add/roll方法中使用。1.4. MessageFormat的用法和SimpleDateFormat一樣,也需要傳入一個(gè)pattern。如String result = MessageFormat.format( "At 1,time on 1,date, there was 2 on planet 0,number,integer.", 7, new Date(), “ a message ”);其中1,time中1是指第幾個(gè)參數(shù),time是指格式化的類型。根據(jù)api進(jìn)行設(shè)置,是調(diào)用NumberFormat和DateFormat進(jìn)行
8、格式化的。還可以調(diào)用parse方法將字符串轉(zhuǎn)化為Obejct。1.5. NumberFormat的用法1.5.1. NumberFormat的介紹NumberFormat 是所有數(shù)字格式的抽象基類。類結(jié)構(gòu)與DateFormat類似。主要也是通過get*Instance方法獲得實(shí)現(xiàn)類DecimalFormat。比較常用的方法有:setParseIntegerOnly:只影響分析。設(shè)為true,則忽略小數(shù)點(diǎn)以后的位置。setDecimalSeparatorAlwaysShown:只影響格式化,且只影響小數(shù)點(diǎn)后沒有數(shù)字的情況?設(shè)置分組符號(hào)是否顯示。例如1,234中的,號(hào)是否顯示。setGroupin
9、gUsed:是否分組。如果此格式中使用了組,則返回 true。例如,在英國(guó)語(yǔ)言環(huán)境中,如果設(shè)置了組,則數(shù) 1234567 可能被格式化為 "1,234,567"。還可以設(shè)置小數(shù)/整數(shù)部分的最大/小位數(shù)。關(guān)于parse方法中的ParsePosition 和 format方法中的FieldPosition待研究。1.5.2. 子類DecimalFormatDecimalFormat 是 NumberFormat 的一個(gè)具體子類,用于格式化十進(jìn)制數(shù)字。在DecimalFormat中傳入pattern,可以自定義格式化類型。舍入方式是half-even(四舍五入)。DecimalF
10、ormat 模式包含正數(shù)和負(fù)數(shù)子模式,例如 "#,#0.00;-#,#0.00"。;后面的代表負(fù)數(shù)模式。單獨(dú)的 "0.00" 等效于 "0.00;-0.00"。如果存在顯式的負(fù)數(shù)子模式,則它僅指定負(fù)數(shù)前綴和后綴;0:代表是數(shù)字;如果不存在則顯示為0;#:代表是數(shù)字;,:分組分隔符;沒有則不分組1.5.3. 子類ChoiceFormatChoiceFormat通常用于在 MessageFormat 中處理復(fù)數(shù)。創(chuàng)建 ChoiceFormat 時(shí),可以指定一個(gè) format 數(shù)組和一個(gè) limit 數(shù)組。這些數(shù)組的長(zhǎng)度必須相同。如api中
11、用于轉(zhuǎn)換星期的例子 double limits = 1,2,3,4,5,6,7; String monthNames = "Sun","Mon","Tue","Wed","Thur","Fri","Sat" ChoiceFormat form = new ChoiceFormat(limits, monthNames); ParsePosition status = new ParsePosition(0); for (double i = 0.0; i
12、<= 8.0; +i) status.setIndex(0); System.out.println(i + " -> " + form.format(i) + " -> " + form.parse(form.format(i),status); form.format(i)根據(jù)limits的數(shù)字轉(zhuǎn)換為星期幾的名稱。limits中的數(shù)字必須按升序排列,如果提供的數(shù)字不在limits中,則選擇使用第一個(gè)或最后一個(gè)索引。form.parse(form.format(i),status),則根據(jù)Name轉(zhuǎn)換為limits中的值。1.5.4.
13、 ChoiceFormat的例子下面是ChoiceFormat的api中一個(gè)較復(fù)雜的帶模式格式的例子, 和MessageFormat一起使用: /生成ChoiceFormat double filelimits = 0,1,2; String filepart = "are no files","is one file","are 2 files"/這里的2是指從testArgs中取第二個(gè)元素的值 ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);/定義For
14、mat數(shù)組testFormats,分別為ChoiceFormat,null, NumberFormat/ChoiceFormat用于0, null用于1, NumberFormat用于2 Format testFormats = fileform, null, NumberFormat.getInstance();/將MessageFormat的formats設(shè)為testFormats/testFormats中的格式順序?qū)?yīng)于模式字符串中的格式元素的順序/最好使用setFormatsByArgumentIndex方法,而不是使用setFormats MessageFormat pattform
15、 = new MessageFormat("There 0 on 1"); pattform.setFormats(testFormats);/進(jìn)行fomat Object testArgs = null, "ADisk", null; for (int i = 0; i < 4; +i) testArgs0 = new Integer(i); testArgs2 = testArgs0;/此時(shí)的testArgs值為0, "ADisk",0/根據(jù)MessageFormat的定義,對(duì)testArgr元素進(jìn)行處理 System.ou
16、t.println(pattform.format(testArgs); 1.5.5. ChoiceFormat的pattern構(gòu)造方法ChoiceFormat還有另外一個(gè)構(gòu)造方法,傳入pattern。為 ChoiceFormat 對(duì)象指定一個(gè)模式是相當(dāng)直接的。例如: ChoiceFormat fmt = new ChoiceFormat( "-1#is negative| 0#is zero or fraction | 1#is one |1.0<is 1+ |2#is two |2<is more than 2.");其中數(shù)字#是按照大小順序排列的, for
17、mate方法中傳入?yún)?shù)x,如果x在0,1之間,則按照0處理。1.5.6. 其它的數(shù)字格式化另外在對(duì)數(shù)字進(jìn)行格式化時(shí),也可以考慮使用java.math.BigDecimal。如setScale(int newScale,int roundingMode):newScale指精確度,即保留幾位小數(shù)。roundingMode指舍入模式,常用的是四舍五入。DecimalFormat貌似只能使用四舍五入,如果使用別的舍入方式,就要使用BigDecimal了。java.lang.Integer中的幾個(gè)轉(zhuǎn)換進(jìn)制的方法也比較實(shí)用toBinaryString(int i): 以二進(jìn)
18、制(基數(shù) 2)無(wú)符號(hào)整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式。toHexString(int i): 以十六進(jìn)制的無(wú)符號(hào)整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式toOctalString(int i) :以八進(jìn)制(基數(shù) 8)無(wú)符號(hào)整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式。2. java.util.Formatter2.1. 介紹Formatter類是個(gè)final的class,printf 風(fēng)格的格式字符串的解釋程序,和java.text.Format中的功能有很多重復(fù)的地方。Formatter比較常見的使用方法是String.format(format, args),Sys
19、tem.out.printf(format, args)等。這里只是簡(jiǎn)單總結(jié)一下,詳細(xì)的參照api。下面的每節(jié)是對(duì)格式說明符中的元素的說明。常規(guī)類型、字符類型和數(shù)值類型的格式說明符的語(yǔ)法如下:%argument_index$flagswidth.precisionconversion其中%和conversion(轉(zhuǎn)換類型)是必須的,%表示正則表達(dá)式的開始。可選的argument_index$,指的是參數(shù)在參數(shù)列表中的位置。如果設(shè)定argument_index$,則按照args的順序依次處理??蛇x的 flags(標(biāo)志) 是修改輸出格式的字符集。有效標(biāo)志的集合取決于轉(zhuǎn)換類型。可選 width(寬度
20、) 是一個(gè)非負(fù)十進(jìn)制整數(shù),表明要向輸出中寫入的最少字符數(shù)。可選 precision(精度) 是一個(gè)非負(fù)十進(jìn)制整數(shù),通常用來限制字符數(shù)。特定行為取決于轉(zhuǎn)換類型。2.2. 轉(zhuǎn)換(conversion)轉(zhuǎn)換是核心,按參數(shù)類別可以分為常規(guī),字符,整數(shù),浮點(diǎn),日期/時(shí)間,百分比,行分隔符。不區(qū)分大小寫。2.2.1. 常規(guī)常規(guī)的返回值為字符串,有:b:結(jié)果為“true/false”。參數(shù) arg 為 null或boolean/Boolean型的false時(shí),返回字符串的“false”。否則返回字符串的“true”。h:結(jié)果為十六進(jìn)制的字符串。如果參數(shù) arg 為 null,則結(jié)果為 "null&
21、quot;。否則,結(jié)果為調(diào)用 Integer.toHexString(arg.hashCode() 得到的結(jié)果。s:比較常用的轉(zhuǎn)換,取得字符串。如果參數(shù) arg 為 null,則結(jié)果為 "null"。如果 arg 實(shí)現(xiàn) Formattable,則調(diào)用 arg.formatTo。否則,結(jié)果為調(diào)用 arg.toString() 得到的結(jié)果。2.2.2. 字符c: 結(jié)果是一個(gè) Unicode 字符 2.2.3. 整數(shù)是對(duì)進(jìn)制的操作,有:d:結(jié)果被格式化為十進(jìn)制整數(shù)o:結(jié)果被格式化為八進(jìn)制整數(shù)x:結(jié)果被格式化為十六進(jìn)制整數(shù)2.2.4. 浮點(diǎn)e:結(jié)果被格式化為用計(jì)算機(jī)科學(xué)記數(shù)法表示的
22、十進(jìn)制數(shù)f :結(jié)果被格式化為十進(jìn)制數(shù)g:根據(jù)精度和舍入運(yùn)算后的值,使用計(jì)算機(jī)科學(xué)記數(shù)形式或十進(jìn)制格式對(duì)結(jié)果進(jìn)行格式化a:浮點(diǎn) 結(jié)果被格式化為帶有效位數(shù)和指數(shù)的十六進(jìn)制浮點(diǎn)數(shù)2.2.5. 日期/時(shí)間t:日期和時(shí)間轉(zhuǎn)換字符的前綴。對(duì)于日期/時(shí)間的轉(zhuǎn)換,以t開頭再指定轉(zhuǎn)換內(nèi)容。如Calendar c = new GregorianCalendar(1995, MAY, 23); String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);具體參數(shù)的意義參照api。2.2.6. 百分比%:結(jié)果為字面值
23、'%'。2.2.7. 行分隔符n:生成一個(gè)換行符。為平臺(tái)相關(guān)。2.3. 標(biāo)志(flags)標(biāo)志有'-','#','+',' ','0',',','('。常用的是'-':將結(jié)果設(shè)為左對(duì)齊。同時(shí)flag的使用依賴于conversion。2.4. 寬度(width)寬度是將向輸出中寫入的最少字符數(shù)。對(duì)于行分隔符轉(zhuǎn)換,不適用寬度,如果提供寬度,則會(huì)拋出異常。2.5. 精度(.precision)對(duì)于常規(guī)參數(shù)類型,精度是將向輸出中寫入的最多
24、字符數(shù)。 對(duì)于浮點(diǎn)轉(zhuǎn)換 'e'、'E' 和 'f',精度是小數(shù)點(diǎn)分隔符后的位數(shù)。如果轉(zhuǎn)換是 'g' 或 'G',那么精度是舍入計(jì)算后所得數(shù)值的所有位數(shù)。如果轉(zhuǎn)換是 'a' 或 'A',則不必指定精度。精度的優(yōu)先級(jí)大于寬度。3. java.util.regex.Pattern3.1. 介紹Pattern(模式)是正則表達(dá)式的編譯表示形式,經(jīng)常和java.util.regex.Matcher。Pattern沒有提供構(gòu)造函數(shù)。通過調(diào)用Pattern. compile (String
25、0;regex)方法來獲得實(shí)例。pattern.matcher (CharSequence input);來判斷是否input是否可以與regex匹配。compile通過Matcher m = p.matcher("aaaaab");方法來獲得Matcher。pattern.split(CharSequence input);可以將input分隔成一個(gè)String數(shù)組。3.2. 關(guān)于regex字符類比較常用, 是對(duì)字符的羅列。如abc。a-z&&bc的解釋為a 到 z,除了 b 和 c:ad-z(減去)。還有字符,預(yù)定義字符類,邊界匹配器也比較常用。具體參照api。Greedy 數(shù)量詞也需要了解。X? 表示X,一次或一次也沒有X* 表示X,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)合作伙伴資信證明(6篇)
- 網(wǎng)絡(luò)服務(wù)供應(yīng)合作協(xié)議書
- 市場(chǎng)營(yíng)銷實(shí)習(xí)經(jīng)歷證明書(7篇)
- 跨境電商行業(yè)海外倉(cāng)建設(shè)與物流優(yōu)化方案
- 現(xiàn)代管理知識(shí)更新方案試題及答案
- 2025保險(xiǎn)公司勞動(dòng)合同模板
- 古箏大賽章程范本
- 2025成品柴油購(gòu)銷合同
- ??菩姓芾砜紙?chǎng)模擬試題及答案
- 市政公共藝術(shù)的創(chuàng)意實(shí)踐試題及答案
- 車道偏離預(yù)警系統(tǒng)研究綜述
- GB/T 23150-2024熱水器用管狀加熱器
- 人教版2024-2025學(xué)年七年級(jí)上冊(cè)數(shù)學(xué)單元檢測(cè)(整式的加減)附答案
- 新版加油站安全操作規(guī)程
- 皮膚修復(fù)與周期調(diào)控
- 歌爾在線測(cè)評(píng)題
- 2024年時(shí)事政治題庫(kù)及參考答案(100題)
- DB3301-T 0222-2024 國(guó)際化醫(yī)院建設(shè)規(guī)范
- 《念奴嬌·過洞庭》《赤壁賦》聯(lián)讀教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 2024年假離婚夫妻協(xié)議書
- 巡視整改和成果運(yùn)用的意見原文
評(píng)論
0/150
提交評(píng)論