




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
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.浮點62.2.5.日期/時間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三個格式化相關(guān)的體系,使用起來較為復(fù)雜,在這里總結(jié)一下。1. java.text.Format1.1. Format的
3、方法java.text.Format做為一個抽象類,有二個抽象方法,format(Object obj, StringBuffer toAppendTo, FieldPosition pos):格式化一個對象,并將得到的文本追加到給定的字符緩沖區(qū)。是將obj格式化為字符串,并加入到toAppendTo中。parseObject(String source, ParsePosition pos): 分析字符串文本,生成一個對象。是format方法的逆向方法,將String轉(zhuǎn)化為Object。另外的format和parseObject這兩個方法的重載。方法formatToCharacterIter
4、ator(Object obj)并非抽象方法,api上要求子類必須實現(xiàn)這個方法。1.2. Format的子類Java 2 平臺為格式化日期、消息和數(shù)字分別提供了三個特殊的 Format 的子類:DateFormat(抽象類)、MessageFormat 和 NumberFormat(抽象類)。 >DateFormat >SimpleDateFormatFormat >MessageFormat>NumberFormat>ChoiceFormat > DecimalFormat用于格式化十進制數(shù)字1.3. DateFormat的用法DateFormat 是日期
5、/時間格式化子類的抽象類, 有一些static的get*Instance()方法來獲得實例。通過設(shè)置結(jié)果的長度和地區(qū),來獲得日期,時間等的格式formatter。不太常用。一般會使用SimpleDateFormat子類,new SimpleDateFormat("yyyy-MM-dd")或new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"),來獲得常用的時間格式。DateFormat 的get*Instance()方法一般也是獲得SimpleDateFormat。看DateFormat的源代碼有個疑問,如果繼承了Date
6、Format類,那DateFormat. get*Instance()的方法還是返回SimpleDateFormat? DateFormat.get是私有的,也不能覆蓋。DateFormat類中還有一些static的字段,如WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD。api上說在FieldPosition中使用,用于對齊。java.util.Calendar也是日期操作相關(guān)的類,實現(xiàn)類為GregorianCalendar。主要對日期進行操作。注意add方法和roll方法的區(qū)別,roll方法不更改更大的字段。還有一些靜態(tài)的變量DAY_OF_MONTH,DAY_
7、OF_WEEK等,在get/set/add/roll方法中使用。1.4. MessageFormat的用法和SimpleDateFormat一樣,也需要傳入一個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是指第幾個參數(shù),time是指格式化的類型。根據(jù)api進行設(shè)置,是調(diào)用NumberFormat和DateFormat進行
8、格式化的。還可以調(diào)用parse方法將字符串轉(zhuǎn)化為Obejct。1.5. NumberFormat的用法1.5.1. NumberFormat的介紹NumberFormat 是所有數(shù)字格式的抽象基類。類結(jié)構(gòu)與DateFormat類似。主要也是通過get*Instance方法獲得實現(xiàn)類DecimalFormat。比較常用的方法有:setParseIntegerOnly:只影響分析。設(shè)為true,則忽略小數(shù)點以后的位置。setDecimalSeparatorAlwaysShown:只影響格式化,且只影響小數(shù)點后沒有數(shù)字的情況?設(shè)置分組符號是否顯示。例如1,234中的,號是否顯示。setGroupin
9、gUsed:是否分組。如果此格式中使用了組,則返回 true。例如,在英國語言環(huán)境中,如果設(shè)置了組,則數(shù) 1234567 可能被格式化為 "1,234,567"。還可以設(shè)置小數(shù)/整數(shù)部分的最大/小位數(shù)。關(guān)于parse方法中的ParsePosition 和 format方法中的FieldPosition待研究。1.5.2. 子類DecimalFormatDecimalFormat 是 NumberFormat 的一個具體子類,用于格式化十進制數(shù)字。在DecimalFormat中傳入pattern,可以自定義格式化類型。舍入方式是half-even(四舍五入)。DecimalF
10、ormat 模式包含正數(shù)和負數(shù)子模式,例如 "#,#0.00;-#,#0.00"。;后面的代表負數(shù)模式。單獨的 "0.00" 等效于 "0.00;-0.00"。如果存在顯式的負數(shù)子模式,則它僅指定負數(shù)前綴和后綴;0:代表是數(shù)字;如果不存在則顯示為0;#:代表是數(shù)字;,:分組分隔符;沒有則不分組1.5.3. 子類ChoiceFormatChoiceFormat通常用于在 MessageFormat 中處理復(fù)數(shù)。創(chuàng)建 ChoiceFormat 時,可以指定一個 format 數(shù)組和一個 limit 數(shù)組。這些數(shù)組的長度必須相同。如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中,則選擇使用第一個或最后一個索引。form.parse(form.format(i),status),則根據(jù)Name轉(zhuǎn)換為limits中的值。1.5.4.
13、 ChoiceFormat的例子下面是ChoiceFormat的api中一個較復(fù)雜的帶模式格式的例子, 和MessageFormat一起使用: /生成ChoiceFormat double filelimits = 0,1,2; String filepart = "are no files","is one file","are 2 files"/這里的2是指從testArgs中取第二個元素的值 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);/進行fomat Object testArgs = null, "ADisk", null; for (int i = 0; i < 4; +i) testArgs0 = new Integer(i); testArgs2 = testArgs0;/此時的testArgs值為0, "ADisk",0/根據(jù)MessageFormat的定義,對testArgr元素進行處理 System.ou
16、t.println(pattform.format(testArgs); 1.5.5. ChoiceFormat的pattern構(gòu)造方法ChoiceFormat還有另外一個構(gòu)造方法,傳入pattern。為 ChoiceFormat 對象指定一個模式是相當(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ù)字格式化另外在對數(shù)字進行格式化時,也可以考慮使用java.math.BigDecimal。如setScale(int newScale,int roundingMode):newScale指精確度,即保留幾位小數(shù)。roundingMode指舍入模式,常用的是四舍五入。DecimalFormat貌似只能使用四舍五入,如果使用別的舍入方式,就要使用BigDecimal了。java.lang.Integer中的幾個轉(zhuǎn)換進制的方法也比較實用toBinaryString(int i): 以二進
18、制(基數(shù) 2)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式。toHexString(int i): 以十六進制的無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式toOctalString(int i) :以八進制(基數(shù) 8)無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式。2. java.util.Formatter2.1. 介紹Formatter類是個final的class,printf 風(fēng)格的格式字符串的解釋程序,和java.text.Format中的功能有很多重復(fù)的地方。Formatter比較常見的使用方法是String.format(format, args),Sys
19、tem.out.printf(format, args)等。這里只是簡單總結(jié)一下,詳細的參照api。下面的每節(jié)是對格式說明符中的元素的說明。常規(guī)類型、字符類型和數(shù)值類型的格式說明符的語法如下:%argument_index$flagswidth.precisionconversion其中%和conversion(轉(zhuǎn)換類型)是必須的,%表示正則表達式的開始。可選的argument_index$,指的是參數(shù)在參數(shù)列表中的位置。如果設(shè)定argument_index$,則按照args的順序依次處理??蛇x的 flags(標(biāo)志) 是修改輸出格式的字符集。有效標(biāo)志的集合取決于轉(zhuǎn)換類型。可選 width(寬度
20、) 是一個非負十進制整數(shù),表明要向輸出中寫入的最少字符數(shù)。可選 precision(精度) 是一個非負十進制整數(shù),通常用來限制字符數(shù)。特定行為取決于轉(zhuǎn)換類型。2.2. 轉(zhuǎn)換(conversion)轉(zhuǎn)換是核心,按參數(shù)類別可以分為常規(guī),字符,整數(shù),浮點,日期/時間,百分比,行分隔符。不區(qū)分大小寫。2.2.1. 常規(guī)常規(guī)的返回值為字符串,有:b:結(jié)果為“true/false”。參數(shù) arg 為 null或boolean/Boolean型的false時,返回字符串的“false”。否則返回字符串的“true”。h:結(jié)果為十六進制的字符串。如果參數(shù) arg 為 null,則結(jié)果為 "null&
21、quot;。否則,結(jié)果為調(diào)用 Integer.toHexString(arg.hashCode() 得到的結(jié)果。s:比較常用的轉(zhuǎn)換,取得字符串。如果參數(shù) arg 為 null,則結(jié)果為 "null"。如果 arg 實現(xiàn) Formattable,則調(diào)用 arg.formatTo。否則,結(jié)果為調(diào)用 arg.toString() 得到的結(jié)果。2.2.2. 字符c: 結(jié)果是一個 Unicode 字符 2.2.3. 整數(shù)是對進制的操作,有:d:結(jié)果被格式化為十進制整數(shù)o:結(jié)果被格式化為八進制整數(shù)x:結(jié)果被格式化為十六進制整數(shù)2.2.4. 浮點e:結(jié)果被格式化為用計算機科學(xué)記數(shù)法表示的
22、十進制數(shù)f :結(jié)果被格式化為十進制數(shù)g:根據(jù)精度和舍入運算后的值,使用計算機科學(xué)記數(shù)形式或十進制格式對結(jié)果進行格式化a:浮點 結(jié)果被格式化為帶有效位數(shù)和指數(shù)的十六進制浮點數(shù)2.2.5. 日期/時間t:日期和時間轉(zhuǎn)換字符的前綴。對于日期/時間的轉(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:生成一個換行符。為平臺相關(guān)。2.3. 標(biāo)志(flags)標(biāo)志有'-','#','+',' ','0',',','('。常用的是'-':將結(jié)果設(shè)為左對齊。同時flag的使用依賴于conversion。2.4. 寬度(width)寬度是將向輸出中寫入的最少字符數(shù)。對于行分隔符轉(zhuǎn)換,不適用寬度,如果提供寬度,則會拋出異常。2.5. 精度(.precision)對于常規(guī)參數(shù)類型,精度是將向輸出中寫入的最多
24、字符數(shù)。 對于浮點轉(zhuǎn)換 'e'、'E' 和 'f',精度是小數(shù)點分隔符后的位數(shù)。如果轉(zhuǎn)換是 'g' 或 'G',那么精度是舍入計算后所得數(shù)值的所有位數(shù)。如果轉(zhuǎn)換是 'a' 或 'A',則不必指定精度。精度的優(yōu)先級大于寬度。3. java.util.regex.Pattern3.1. 介紹Pattern(模式)是正則表達式的編譯表示形式,經(jīng)常和java.util.regex.Matcher。Pattern沒有提供構(gòu)造函數(shù)。通過調(diào)用Pattern. compile (String
25、0;regex)方法來獲得實例。pattern.matcher (CharSequence input);來判斷是否input是否可以與regex匹配。compile通過Matcher m = p.matcher("aaaaab");方法來獲得Matcher。pattern.split(CharSequence input);可以將input分隔成一個String數(shù)組。3.2. 關(guān)于regex字符類比較常用, 是對字符的羅列。如abc。a-z&&bc的解釋為a 到 z,除了 b 和 c:ad-z(減去)。還有字符,預(yù)定義字符類,邊界匹配器也比較常用。具體參照api。Greedy 數(shù)量詞也需要了解。X? 表示X,一次或一次也沒有X* 表示X,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 傳染病考試題庫及答案
- 成人專生本醫(yī)學(xué)綜合考試題及答案
- 潮南摩托車考試題目及答案
- 畢業(yè)會計實操考試題庫及答案
- 兒童飲食:提供健康的選擇
- 寶寶護理考試題及答案
- 2025年金融科技企業(yè)估值模型創(chuàng)新與應(yīng)用報告:投資策略布局001
- 2025年金融科技賦能普惠金融發(fā)展現(xiàn)狀及效果評估報告
- 2025至2030薯片行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025年金融風(fēng)險管理數(shù)字化轉(zhuǎn)型的風(fēng)險管理能力提升路徑與策略分析報告
- 2025年貴州省中考語文試卷真題(含答案)
- 2025年廣西公需科目答案02
- 幼兒園小班交通安全主題PPT
- 國開網(wǎng)電大 市場調(diào)查形成性考核1-3答案
- 建筑工程公司安全生產(chǎn)責(zé)任制度
- 被執(zhí)行人財產(chǎn)申報表
- 人教版五年級語文(下冊)期末試卷(附答案)
- 信用修復(fù)申請書
- 深圳房地產(chǎn)開發(fā)企業(yè)資質(zhì)申報表
- 美變出廠檢驗記錄
- UPS電源施工方案
評論
0/150
提交評論