Java 2實(shí)用教程_第8章_常用實(shí)用類1_第1頁(yè)
Java 2實(shí)用教程_第8章_常用實(shí)用類1_第2頁(yè)
Java 2實(shí)用教程_第8章_常用實(shí)用類1_第3頁(yè)
Java 2實(shí)用教程_第8章_常用實(shí)用類1_第4頁(yè)
Java 2實(shí)用教程_第8章_常用實(shí)用類1_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PPT注意事項(xiàng): 當(dāng)前PPT課件文件必須和提供的源代碼文件夾“代碼”在同一目錄中即不要移動(dòng)文件夾“代碼”的默認(rèn)位置.,第8章 常用實(shí)用類,配合例子源代碼一起使用,課件制作人:張躍平,導(dǎo)讀,主要內(nèi)容 String類 StringTokenizer類 Scanner類 StringBuffer類 Date與Calendar類 日期格式化 Math、BigInteger與Random類 數(shù)字格式化 Class類與Console類 Pattern與Match類 重點(diǎn)和難點(diǎn) 重點(diǎn):字符串的常用方法;字符串分析器使用;類Date和類Calendar以及類Math的使用 難點(diǎn):字符串分析器的使用;各常用類的

2、實(shí)際運(yùn)用,8.1 String類,Java專門提供了用來(lái)處理字符序列的String類。 String類在java.lang包中,由于java.lang包中的類被默認(rèn)引入,因此程序可以直接使用String類。 需要注意的是Java把String類聲明為final類,因此用戶不能擴(kuò)展String類,即String類不可以有子類。,8.1.1 構(gòu)造字符串對(duì)象,1常量對(duì)象:字符串常量對(duì)象是用雙引號(hào)括起的字符序列,例如:你好、12.97、boy等。,Java把用戶程序中的String常量放入常量池。因?yàn)镾tring常量是對(duì)象,所以也有自己的引用和實(shí)體,如圖8.1所示。例如String常量對(duì)象你好的引用是

3、12AB,實(shí)體里是字符序列:你好。,可以這樣簡(jiǎn)單的理解常量池:常量池中的數(shù)據(jù)在程序運(yùn)行期間再也不允許改變,8.1.1 構(gòu)造字符串對(duì)象,可以使用String類聲明對(duì)象并創(chuàng)建對(duì)象,例如: String s = new String(we are students); String t = new String(we are students);,2String對(duì)象,對(duì)象變量s中存放著引用,表明自己的實(shí)體的位置,即new 運(yùn)算符首先分配內(nèi)存空間并在內(nèi)存空間中放入字符序列,然后計(jì)算出引用。將引用賦值給字符串對(duì)象s后,String對(duì)象s的內(nèi)存模型如圖8.2所示意(凡是new運(yùn)算符構(gòu)造出的對(duì)象都不在常量池

4、)。盡管s和t的實(shí)體相同,都是字符序列:we are students,但二者的引用是不同的(如圖8.2所),即表達(dá)式s=t的值是false(new運(yùn)算符如它名字一樣。每次都要開辟新天地)。,另外,用戶無(wú)法輸出String對(duì)象的引用: Syste.out.println(s); 輸出的是對(duì)象的實(shí)體,即字符序列we are students。,也可以用一個(gè)已創(chuàng)建的String對(duì)象創(chuàng)建另一個(gè)String對(duì)象,如: String tom = new String(s); String類還有兩個(gè)較常用的構(gòu)造方法。 (1)String (char a)用一個(gè)字符數(shù)組a創(chuàng)建一個(gè)String對(duì)象,如: ch

5、ar a = J,a,v,a; String s = new String(a); 過(guò)程相當(dāng)于 String s = new String(Java); (2)String(char a,int startIndex,int count) 提取字符數(shù)組a中的一部分字符創(chuàng)建一個(gè)String對(duì)象,參數(shù)startIndex和count分別指定在a中提取字符的起始位置和從該位置開始截取的字符個(gè)數(shù),如: char a = 零,壹,貳,叁,肆,伍,陸,柒,捌,玖; String s = new String(a,2,4); 相當(dāng)于 String s = new String(貳叁肆伍);,8.1.1 構(gòu)造

6、字符串對(duì)象,3引用String常量 String常量是對(duì)象,因此可以把String常量的引用賦值給一個(gè)String對(duì)象,例如,String s1,s2; s1 = 你好; s2 = 你好;,s1,s2具有相同的引用(12AB),表達(dá)式s1=s2的值是true,因而具有相同的實(shí)體。s1,s2內(nèi)存示意如圖8.3所示。,由于用戶程序無(wú)法知道常量池中“你好”的引用,那么把String常量的引用賦值給一個(gè)String對(duì)象s1時(shí),Java讓用戶直接寫常量的實(shí)體內(nèi)容來(lái)完成這一任務(wù),但實(shí)際上賦值到String對(duì)象s1中的是String常量“你好”的引用(見圖8.3)。s1是用戶聲明的String對(duì)象,s1中的

7、值是可以被改變的,如果再進(jìn)行s1 = “boy”,那么s1中的值將發(fā)生變化(變成78CD)。,8.1.2 字符串的并置,String對(duì)象可以用“+”進(jìn)行并置運(yùn)算,即首尾相接得到一個(gè)新的String對(duì)象。,String you = 你; String hi = 好; String testOne;,you和hi進(jìn)行并置運(yùn)算you+hi得到一個(gè)新的String對(duì)象,可以將這個(gè)新的String對(duì)象的引用賦值給一個(gè)String聲明的對(duì)象:,testOne = you+shi;,那么testOne的實(shí)體中的字符序列是 你好。 需要注意的是,參與并置運(yùn)算的String對(duì)象,只要有一個(gè)是變量,那么Java就

8、會(huì)在動(dòng)態(tài)區(qū)存放所得到的新String對(duì)象的實(shí)體和引用,you+hi相當(dāng)于new String(你好)。,如果是兩個(gè)常量進(jìn)行并置運(yùn)算,那么得到的仍然是常量,如果常量池沒(méi)有這個(gè)常量就放入常量池。 你+好 的結(jié)果就是常量池中 的 你好,仔細(xì)閱讀例子1,理解程序的輸出結(jié)果。,public class Example8_1 public static void main(String args) String hello = 你好; String testOne = 你+好; /【代碼1】 System.out.println(hello = testOne); /輸出結(jié)果是true System.ou

9、t.println(你好 = testOne); /輸出結(jié)果是true System.out.println(你好 = hello); /輸出結(jié)果是true String you = 你; String hi = 好; String testTwo = you+hi; /【代碼2】 System.out.println(hello = testTwo); /輸出結(jié)果是false String testThree = you+hi; System.out.println(testTwo = testThree); /輸出結(jié)果是false ,例子1代碼講解,【代碼1】:String testOne

10、 = 你+好;的賦值號(hào)的右邊是兩個(gè)常量進(jìn)行并置運(yùn)算,因此,結(jié)果是常量池中的常量你好(如果讀者學(xué)習(xí)過(guò)編譯原理,可能知道所謂的常量?jī)?yōu)化技術(shù),常量折疊是一種Java編譯器使用的優(yōu)化技術(shù),String testOne = 你+好,被編譯器優(yōu)化為String testOne = 你好,就像int x = 1+2被優(yōu)化為int x = 3一樣),所以 表達(dá)式 你好 = testOne 和表達(dá)式 hello = testOne的值都是true。,例子1代碼講解續(xù),【代碼2】:testTwo = you+hi; 的賦值號(hào)的右邊有變量,例如變量you參與了并置運(yùn)算,那么you+hi相當(dāng)于new String(你

11、好); 因此結(jié)果在動(dòng)態(tài)區(qū)誕生新對(duì)象,testTwo存放著引用BCD5,testTwo的實(shí)體中存放者字符序列:你好(如圖8.4),所以表達(dá)式hello = testTwo的結(jié)果是false。,程序更關(guān)心兩個(gè)String對(duì)象的實(shí)體,而不是二者的引用是否相同。判斷兩個(gè)String對(duì)象的實(shí)體,即字符序列是否相同見稍后的8.1.2(例子2),8.1.2 String 類的常用方法_1,1public int length():獲取一個(gè)字符串的長(zhǎng)度 2public boolean equals(String s):判斷當(dāng)前String對(duì)象的字符序列是否與參數(shù)s指定的String對(duì)象的字符序列相同 例題2

12、說(shuō)明了equals的用法。 3public boolean startsWith(String s) 判斷當(dāng)前String對(duì)象的字符序列前綴是否是參數(shù)指定的String對(duì)象s的字符序列,例如: String tom = 天氣預(yù)報(bào),陰有小雨,jerry = 比賽結(jié)果,中國(guó)隊(duì)贏得勝利; tom.startsWith(“天氣”)的值是true; tom.endsWith(大雨)的值是false,,8.1.2 String 類的常用方法_2,4. public int compareTo(String s):按字典序與參數(shù)s指定的字符序列比較大小。 如果當(dāng)前String對(duì)象的字符序列與s的相同,該方法

13、返回值0,如果大于s的字符序列,該方法返回正值;如果小于s的字符序列,該方法返回負(fù)值。 例如,字符a在Unicode表中的排序位置是97,字符b是98,那么對(duì)于 String str = “abcde”; pareTo(“boy”)小于0,pareTo(“aba”)大于0,pareTo(“abcde”)等于0 其相關(guān)方法 public int compareToIgnoreCase(String s) 例題3 SortString.java Example8_2.java 使用java.util包中的Arrays調(diào)用sort方法和自己編寫SortString類中的sort方法將一個(gè)String

14、數(shù)組中的String對(duì)象的字符序列按字典序排序。,8.1.2 String 類的常用方法_3,5.public boolean contains(String s):String對(duì)象調(diào)用contains方法判斷當(dāng)前String對(duì)象的字符序列是否包含參數(shù)s的字符序列,例如,tom=student,那么tom.contains(stu)的值就是true,而tom.contains(ok)的值是false。 。 6.public int indexOf (String str):String對(duì)象調(diào)用方法從當(dāng)前String對(duì)象的字符序列的0索引位置開始檢索首次出現(xiàn)str的字符序列的位置,并返回該位置。

15、如果沒(méi)有檢索到,該方法返回的值是1,其相關(guān)方法: indexOf(String s ,int startpoint) lastIndexOf (String s) 例如 String tom = I am a good cat; tom.indexOf(a);/值是2 tom.indexOf(good,2);/值是7 tom.indexOf(a,7);/值是13 tom.indexOf(w,2);/值是-1 7. public String substring(int startpoint):字符串對(duì)象調(diào)用該方法獲得一個(gè)新的String對(duì)象,新的String對(duì)象的字符序列是復(fù)制當(dāng)前String

16、對(duì)象的字符序列中的startpoint位置至最后位置上的字符所得到的字符序列。String對(duì)象調(diào)用substring(int start ,int end)方法獲得一個(gè)新的String對(duì)象,新的String對(duì)象的字符序列是復(fù)制當(dāng)前String對(duì)象的字符序列中的start位置至end1位置上的字符所得到的字符序列。 8public String trim() :得到一個(gè)新的String對(duì)象,這個(gè)新的String對(duì)象的字符序列是當(dāng)前String對(duì)象的字符序列去掉前后空格后的字符序列。,8.1.3 符串與基本數(shù)據(jù)的相互轉(zhuǎn)化_1,Java.lang包中的Integer類調(diào)用其類方法: public s

17、tatic int parseInt(String s) 可以將由“數(shù)字”字符組成的字符串,如“876”,轉(zhuǎn)化為int型數(shù)據(jù),,類似地,使用java.lang包中的Byte、Short、Long、Float、Double類調(diào)相應(yīng)的類方法可以將由數(shù)字字符組成的字符串,轉(zhuǎn)化為相應(yīng)的基本數(shù)據(jù)類型。如:,例如: int x; String s = “876; x = Integer.parseInt(s);,public static byte parseByte(String s) throws NumberFormatException public static short parseShort

18、(String s) throws NumberFormatException public static long parseLong(String s) throws NumberFormatException public static float parseFloat(String s) throws NumberFormatException public static double parseDouble(String s) throws NumberFormatException,8.1.3 符串與基本數(shù)據(jù)的相互轉(zhuǎn)化_2,可以使用String 類的類方法 public stati

19、c String valueOf(byte n) public static String valueOf(int n) public static String valueOf(long n) public static String valueOf(float n),public static String valueOf(double n) 將形如123、1232.98等數(shù)值轉(zhuǎn)化為字符串,如: String str = String.valueOf(12313.9876); 例題4 求若干個(gè)數(shù)之和,程序輸出結(jié)果如圖8.4。 注 應(yīng)用程序中的main方法中的參數(shù)args能接受用戶從鍵盤鍵入

20、的字符串。 比如,使用解釋器java.exe來(lái)執(zhí)行主類 C:ch8java Example8_4 78.86 12 25 125 98 這時(shí)程序中的args0、arg1、arg2、arg3和args4 分別得到字符串“78.86”、“12”、“25”、“125”和“98”。,8.1.4 對(duì)象的字符串表示,在子類中我們講過(guò),所有的類都默認(rèn)是java.lang包中Object類的子類或間接子類。Object類有一個(gè) public String toString() 方法,一個(gè)對(duì)象通過(guò)調(diào)用該方法可以獲得該對(duì)象的字符序列表示。一個(gè)對(duì)象調(diào)用toString()方法返回的String對(duì)象的字符序列的一般形

21、式為: 創(chuàng)建對(duì)象的類的名字對(duì)象的引用的字符串表示 例題5 TV.java Example8_5.java TV類重寫了toString()方法,并使用super調(diào)用隱藏的toString()方法,8.1.5 字符串與字符、字節(jié)數(shù)組_1,1字符串與字符數(shù)組 String 類的構(gòu)造方法: String(char); String(char,int offset,int length)分別用字符數(shù)組中的全部字符和部分字符創(chuàng)建字符串對(duì)象 將String對(duì)象的部分字符序列存放到數(shù)組中的方法: public void getChars(int start,int end,char c,int offset

22、 ) 將String對(duì)象的字符序列存放到數(shù)組中的方法 public char toCharArray() 例題6 具體地說(shuō)明了getChars()和toCharArray()方法的使用,8.1.5 字符串與字符、字節(jié)數(shù)組_1,2字符串與字節(jié)數(shù)組 String(byte)用指定的字節(jié)數(shù)組構(gòu)造一個(gè)字符串對(duì)象。 String(byte,int offset,int length) 用指定的字節(jié)數(shù)組的一部分,即從數(shù)組起始位置offset開始取length個(gè)字節(jié)構(gòu)造一個(gè)字符串對(duì)象。 public byte getBytes()使用平臺(tái)默認(rèn)的字符編碼,將當(dāng)前String對(duì)象的字符序列存放到字節(jié)數(shù)組,并返回

23、數(shù)組的引用。 public byte getBytes(String charsetName)使用參數(shù)指定字符編碼,將當(dāng)前String對(duì)象的字符序列存放到字節(jié)數(shù)組,并返回?cái)?shù)組的引用。 。,String常量:Java你好,調(diào)用getBytes()返回一個(gè)字節(jié)數(shù)組d,其長(zhǎng)度為8,該字節(jié)數(shù)組的d0、d1、d2和d3單元分別是字符J、a、v和a的編碼,第d4和d5單元存放的是字符你的編碼(GB2312編碼中,一個(gè)漢字占2個(gè)字節(jié)),第d6和d7單元存放的是字符好的編碼。程序運(yùn)行效果如圖8.10。,例題7 假設(shè)機(jī)器的默認(rèn)編碼是:GB2312。字符串:“Java你好”調(diào)用getBytes()返回一個(gè)字節(jié)數(shù)組

24、d,其長(zhǎng)度為8,注意該字節(jié)數(shù)組的d0d7 單元存放字符的編碼的情況。,3字符串的加密算法,使用一個(gè)String對(duì)象password的字符序列作為密碼對(duì)另一個(gè)String對(duì)象sourceString的字符序列進(jìn)行加密,操作過(guò)程如下。 將password的字符序列存放到一個(gè)字符數(shù)組中, char p = password.toCharArray(); 假設(shè)數(shù)組p的長(zhǎng)度為n,那么就將待加密的sourceString的字符序列按順序以n個(gè)字符為一組(最后一組中的字符個(gè)數(shù)可小于n),對(duì)每一組中的字符用數(shù)組a的對(duì)應(yīng)字符做加法運(yùn)算。比如,某組中的n個(gè)字符是a0a1an-1那么按如下方式得到對(duì)該組字符的加密結(jié)

25、果:,上述加密算法的解密算法是對(duì)密文做減法運(yùn)算,例子8,在下面的例子8中 EncryptAndDecrypt.java,Example8_8.java 用戶輸入密碼來(lái)加密“今晚十點(diǎn)進(jìn)攻”,運(yùn)行效果如圖8.11。,8.1.6 正則表達(dá)式及字符串的替換與分解 _1,1正則表達(dá)式 正則表達(dá)式是一個(gè)String對(duì)象的字符序列,該字符序列中含有具有特殊意義字符,這些特殊字符稱做正則表達(dá)式中的元字符。比如,dcat中的d就是有特殊意義的元字符,代表0到9中的任何一個(gè),0cat,1cat,2cat,9cat都是和正則表達(dá)式dcat匹配的字符序列。 String對(duì)象調(diào)用public boolean match

26、es(String regex)方法可以判斷當(dāng)前String對(duì)象的字符序列是否和參數(shù)regex指定的正則表達(dá)式匹配。參考表8.1,表8.2 。,在正則表達(dá)式中可以用方括號(hào)括起若干個(gè)字符來(lái)表示一個(gè)元字符,該元字符代表方括號(hào)中的任何一個(gè)字符。例如String regex = 159ABC,那么1ABC、5ABC和9ABC都是和正則表達(dá)式regex匹配的字符序列。例如,abc:代表a、b、c中的任何一個(gè);abc:代表除了a、b、c以外的任何字符;a-zA-Z:代表英文字母(包括大寫和小寫)中的任何一個(gè),a-zA-Z|0-9|_+,任何由英文字母,數(shù)字或下劃線組成的字符序列都和正則表達(dá)式 匹配,例子9

27、程序判斷用戶從鍵盤輸入的字符序列是由英文字母,數(shù)字或下劃線所組成,8.1.6 正則表達(dá)式及字符串的替換與分解 _1,2字符串的替換 public String replaceAll(String regex,String replacement) String對(duì)象調(diào)用public String replaceAll(String regex,String replacement)方法返回一個(gè)新的String對(duì)象,這個(gè)新的String對(duì)象的字符序列是把當(dāng)前String對(duì)象的字符序列中所有和參數(shù)regex匹配的子字符序列,用參數(shù)replacement的字符序列替換后得到字符序列,例如: Strin

28、g str =12hello567bird.replaceAll(a-zA-Z+,你好); 那么str的字符序列就是將12hello567bird中所有英文字符序列替換為你好后得到的字符序列,即str的字符序列是12你好567你好。 例題10 String對(duì)象str調(diào)用replaceAll()方法返回一個(gè)新的String對(duì)象,該對(duì)象的字符序列是str的字符序列中的網(wǎng)站鏈接地址被替換為“*”后的字符序列。,8.1.6 正則表達(dá)式及字符串的替換與分解 _2,3字符串的分解 public String split(String regex)使用參數(shù)指定的正則表達(dá)式regex做為分隔標(biāo)記分解出其中的單

29、詞,并將分解出的單詞存放在字符串?dāng)?shù)組中。 例如,對(duì)于字符串str String str = 1949年10月1日是中華人民共和國(guó)成立的日子; 如果準(zhǔn)備分解出全部由數(shù)字字符組成的單詞,就必須用非數(shù)字字符串做為分隔標(biāo)記,因此,可以使用正則表達(dá)式:String regex=D+; 做為分隔標(biāo)記分解出str中的單詞:String digitWord=str.split(regex); 那么,digitWord0、digitWord1和digitWord2就分別是“1949”、“10”和“1”。,例題11 用戶從鍵盤輸入一行文本,程序輸出其中的單詞。,需要特別注意的是,split方法認(rèn)為分隔標(biāo)記的左面應(yīng)

30、該是單詞,因此如果和當(dāng)前String對(duì)象的字符序列的前綴和regex 匹配,那么split(String regex)方法分解出的第一個(gè)單詞是不含任何字符的字符序列(長(zhǎng)度為0的字符序列),即。例如,對(duì)于: String str = 公元1949年10月1日是中華人民共和國(guó)成立的日子; 使用正則表達(dá)式String regex=D+作為分隔標(biāo)記分解str的字符序列中的單詞: String digitWord=str.split(regex); 那么,數(shù)組digitWord的長(zhǎng)度是4,不是3。digitWord0、digitWord1,digitWord2和digitWord3分別是:,1949、1

31、0和1。,注意事項(xiàng),8. 2 StringTokenizer類,本節(jié)學(xué)習(xí)怎樣使用StringTokenizer對(duì)象分解String對(duì)象的字符序列。 StringTokenizer類在java.util包中,有兩個(gè)常用的構(gòu)造方法: StringTokenizer(String s):為String對(duì)象s構(gòu)造一個(gè)分析器。使用默認(rèn)的分隔標(biāo)記,即空格符、換行符、回車符、Tab符、進(jìn)紙符做分隔標(biāo)記。 StringTokenizer(String s, String delim為String對(duì)象s構(gòu)造一個(gè)分析器。參數(shù)delim的字符序列中的字符的任意排列被作為分隔標(biāo)記。 例如: StringTokeniz

32、er fenxi = new StringTokenizer(you#*are*#welcome, #*); 如果指定字符#和字符*是分隔標(biāo)記,那么字符#和字符*的任意排列,比如,#*#*就是一個(gè)分隔標(biāo)記,即You#are#*welcome和You*#are*#*#welcome都有三個(gè)單詞,分別是we,are和welcome。,具體使用步驟:,StringTokenizer對(duì)象稱作一個(gè)字符串分析器可以使用下列方法: (1) nextToken():逐個(gè)獲取字符串中的語(yǔ)言符號(hào)(單詞),字符串分析器中的負(fù)責(zé)計(jì)數(shù)的變量的值就自動(dòng)減一 。 (2) hasMoreTokens():只要字符串中還有語(yǔ)言

33、符號(hào),即計(jì)數(shù)變量的值大于0,該方法就返回true,否則返回false。 (3)countTokens():得到分析器中計(jì)數(shù)變量的值。,例子12計(jì)算購(gòu)物小票的中的商品價(jià)格的和,程序關(guān)心是購(gòu)物小票中的數(shù)字,因此需要分解出這些數(shù)字,以便單獨(dú)處理,這樣就需要把非數(shù)字的字符序列替換成統(tǒng)一的字符,以便使用分隔標(biāo)記分解出數(shù)字,例如,對(duì)于12#25#39.87,如果用字符#做分隔標(biāo)記,就很容易分解出數(shù)字單詞。在例子12的PriceToken類中,把購(gòu)物小票中非數(shù)字的字符序列都替換成#,然后再分解出數(shù)字單詞(價(jià)格),并計(jì)算出這些數(shù)字的和,運(yùn)行效果如圖8.14。,PriceToken.java,Example8_

34、12.java,8. 3 Scanner類,使用Scanner類從字符串中解析程序所需要的數(shù)據(jù)。,Scanner對(duì)象可以解析字符序列中的單詞,例如,對(duì)于String對(duì)象NBA String NBA = I Love This Game; 為了解析出NBA的字符序列中的單詞,可以如下構(gòu)造一個(gè)Scanner對(duì)象。 Scanner scanner = new Scanner(NBA); Scanner對(duì)象可以調(diào)用方法 useDelimiter(正則表達(dá)式); 將正則表達(dá)式作為分隔標(biāo)記,即讓Scanner對(duì)象在解析操作時(shí),把與正則表達(dá)式匹配的字符序列作為分隔標(biāo)記。如果不指定分隔標(biāo)記,那么Scanner

35、對(duì)象默認(rèn)地用空白字符:空格,制表符,回行符作為分隔標(biāo)記來(lái)解析String對(duì)象的字符序列中的單詞。,8. 3 Scanner類,scanner將空格做為分隔標(biāo)記來(lái)解析字符序列中的單詞,具體解析操作: scanner調(diào)用next()方法依次返回NBA中的單詞,如果NBA最后一個(gè)單詞已被next()方法返回,scanner調(diào)用hasNext()將返回false,否則返回true。 對(duì)于被解析的字符序列中的數(shù)字型的單詞,比如618,168.98等,scanner可以用nextInt()或nextDouble()方法來(lái)代替next()方法,即scanner可以調(diào)用nextInt()或nextDouble

36、()方法將數(shù)字型單詞轉(zhuǎn)化為int或double數(shù)據(jù)返回。 如果單詞不是數(shù)字型單詞,scanner調(diào)用nextInt()或nextDouble()方法將發(fā)生InputMismatchException異常,在處理異常時(shí)可以調(diào)用next()方法返回該非數(shù)字化單詞。,8. 3 Scanner類,2使用正則表達(dá)式作為分隔標(biāo)記解析字符串 Scanner對(duì)象可以調(diào)用 useDelimiter(正則表達(dá)式); 方法將一個(gè)正則表達(dá)式作為分隔標(biāo)記,即和正則表達(dá)式匹配的字符串都是分隔標(biāo)記。,例題14 使用正則表達(dá)式(匹配所有非數(shù)字字符串)String regex=0123456789.+; 作為分隔標(biāo)記解析字符串

37、:話費(fèi)清單:市話費(fèi)76.89元,長(zhǎng)途花費(fèi)167.38元,短信費(fèi)12.68元中的全部?jī)r(jià)格數(shù)字,并計(jì)算了總的通信費(fèi)用。,例子13,使用正則表達(dá)式: String regex= 0123456789.+ /(匹配所有非數(shù)字字符序列) 作為分隔標(biāo)記,解析市話76.8元,長(zhǎng)途:167.38元,短信12.68元,以及牛奶:8.5圓,香蕉3.6圓,醬油:2.8圓中的價(jià)格,并計(jì)算價(jià)格之和。程序運(yùn)行效果如圖8.15,Example8_13.java,GetPrice.java,8.4 StringBuffer類,String對(duì)象的字符序列是不可修改的,也就是說(shuō),String對(duì)象的字符序列的字符不能被修改、刪除,

38、即String對(duì)象的實(shí)體是不可以再發(fā)生變化的,例如,對(duì)于 String s = new String(我喜歡散步); 如圖8.16所示意。,StringBuffer類的對(duì)象的實(shí)體的內(nèi)存空間可以自動(dòng)地改變大小,便于存放一個(gè)可變的字符序列。比如,對(duì)于: StringBuffer s = new StringBuffer(我喜歡); 對(duì)象s可調(diào)用append方法追加一個(gè)字符序列,如圖8.17。 s.append(玩籃球);,8.4 StringBuffer類_續(xù),1) StringBuffer append(String s):將String對(duì)象s的字符序列追加到當(dāng)前StringBuffer對(duì)象的字

39、符序列中,并返回當(dāng)前StringBuffer對(duì)象的引用 StringBuffer append(int n):將int型數(shù)據(jù)n轉(zhuǎn)化為String對(duì)象,再把該String對(duì)象的字符序列追加到當(dāng)前StringBuffer對(duì)象的字符序列中,并返回當(dāng)前StringBuffer對(duì)象的引用 StringBuffer append(Object o):將一個(gè)Object對(duì)象o的字符序列表示追加到當(dāng)前String- Buffer對(duì)象的字符序列中,并返回當(dāng)前StringBuffer對(duì)象的引用 類似的方法還有: StringBuffer append(long n),StringBuffer append(boo

40、lean n), StringBuffer append(float n),StringBuffer append(double n), StringBuffer append(char n) 2)public chat charAt(int n ):得到參數(shù)n指定的置上的單個(gè)字符 public void setCharAt(int n ,char ch):將當(dāng)前StringBuffer對(duì)象實(shí)體中的字符串位置n處的字符用參數(shù)ch指定的字符替換,2 StringBuffer類的常用方法_1,8.4 StringBuffer類_續(xù),3)StringBuffer insert(int index,

41、String str) :將參數(shù)str指定的字符串插入到參數(shù)index指定的位置 4)public StringBuffer reverse() :將該對(duì)象實(shí)體中的字符翻轉(zhuǎn) 5)StringBuffer delete(int startIndex, int endIndex):從當(dāng)前StringBuffer對(duì)象實(shí)體中的字符串中刪除一個(gè)子字符串 其相關(guān)方法:deleteCharAt(int index) 刪除當(dāng)前StringBuffer對(duì)象實(shí)體的字符串中index位置處的一個(gè)字符。,6)StringBuffer replace(int startIndex,int endIndex,String

42、 str):將當(dāng)前StringBuffer對(duì)象實(shí)體中的字符串的一個(gè)子字符串用參數(shù)str指定的字符串替換 例題14 使用StringBuffer類的常用方法,2 StringBuffer類的常用方法_2,8.5 Date與Calendar類,1. Date類 Date類在java.util包中. Date類的構(gòu)造方法之一: Date()使用Date類的無(wú)參數(shù)構(gòu)造方法創(chuàng)建的對(duì)象可以獲取本地當(dāng)前時(shí)間。 例: Date nowTime=new Date(); 當(dāng)前nowTime對(duì)象中含有的日期、時(shí)間就是創(chuàng)建nowTime對(duì)象時(shí)的本地計(jì)算機(jī)的日期和時(shí)間。 例如,假設(shè)當(dāng)前時(shí)間是:2011年3月10日23:

43、05:32(CST時(shí)區(qū)),那么System.out.println(nowTime); 輸出結(jié)果是:Thu Mar 10 23:05:32 CST 2011。 Date對(duì)象表示時(shí)間的默認(rèn)順序是:星期、月、日、小時(shí)、分、秒、年。,8.5 Date與Calendar類,Date類的構(gòu)造方法之二: Date(long time)使用long型參數(shù)創(chuàng)建指定的時(shí)間 計(jì)算機(jī)系統(tǒng)將其自身的時(shí)間的“公元”設(shè)置在1970年1月1日0時(shí)(格林威治時(shí)間),可以根據(jù)這個(gè)時(shí)間使用Date的帶參數(shù)的構(gòu)造方法:Date(long time)來(lái)創(chuàng)建一個(gè)Date對(duì)象, 例如:Date date1=new Date(1000),

44、 date2=new Date(-1000); 其中的參數(shù)取正數(shù)表示公元后的時(shí)間,取負(fù)數(shù)表示公元前的時(shí)間,其中1000表示1000毫秒,那么,date1含有的日期、時(shí)間就是計(jì)算機(jī)系統(tǒng)公元后1秒時(shí)刻的日期、時(shí)間。 如果運(yùn)行Java程序的本地時(shí)區(qū)是北京時(shí)區(qū)(與格林威治時(shí)間相差8個(gè)小時(shí)),那么上述date1就是1970年01月01日08時(shí)00分01秒、date2就是1970年01月01日07時(shí)59分59秒。 System類的靜態(tài)方法 public long currentTimeMillis() 獲取系統(tǒng)當(dāng)前時(shí)間。,8.5 Date與Calendar類,2. Calendar類 Calendar類在

45、java.util包中。 使用Calendar類的static方法 getInstance()可以初始化一個(gè)日歷對(duì)象, 如:Calendar calendar= Calendar.getInstance(); calendar對(duì)象可以調(diào)用方法: public final void set(int year,int month,int date) public final void set(int year,int month,int date,int hour,int minute) public final void set(int year,int month, int date, int

46、 hour, int minute,int second) 其作用是將日歷翻到任何一個(gè)時(shí)間,8.5 Date與Calendar類,calendar對(duì)象可以調(diào)用方法: public long getTimeInMillis() 可以將時(shí)間表示為毫秒。 public final void setTime(Date date)使用給定的 Date 設(shè)置此 Calendar 的時(shí)間 public int get(int field) :可以獲取有關(guān)年份、月份、小時(shí)、星期等信息 例如:calendar.get(Calendar.MONTH); 返回一個(gè)整數(shù),如果該整數(shù)是0表示當(dāng)前日歷是在一月,該整數(shù)是1

47、表示當(dāng)前日歷是在二月等。 例如:calendar.get(Calendar.DAY_OF_WEEK);返回一個(gè)整數(shù),如果該整數(shù)是1表示星期日,如果是2表示是星期一,依次類推,如果是7表示是星期六。,例題15 計(jì)算了2012-9-01和2016-07-01之間相隔的天數(shù) 例題16 Example8_16.java CalendaBean.java 輸出2016年7月的“日歷”,8. 5 日期的格式化,1 format方法 Formatter類的format方法: format(格式化模式, 日期列表) 按著“格式化模式”返回“日期列表”中所列各個(gè)日期中所含數(shù)據(jù)(年,月,日,小時(shí)等數(shù)據(jù))的字符串表

48、示。 Java已經(jīng)將format方法做為了String類的靜態(tài)方法,因此,程序可以直接使用String類調(diào)用format方法對(duì)日期進(jìn)行格式化。 1)格式化模式 format方法中的“格式化模式”是一個(gè)用雙引號(hào)括起的字符序列(字符串),該字符序列中的字符由時(shí)間格式符和普通字符所構(gòu)成。例如:日期:%ty-%tm-%td String s = String.format(%tY年%tm月%td日,new Date(),new Date(),new Date(); 那么s就是2011年02月10日,8. 6 日期的格式化,2)日期列表 format方法中的“日期列表”可以是用逗號(hào)分隔的Calendar

49、對(duì)象或Date對(duì)象。 format方法默認(rèn)按從左到右的順序使用“格式化模式”中的格式符來(lái)格式“日期列表”中對(duì)應(yīng)的日期,而“格式化模式”中的普通字符保留原樣。 3)格式化同一日期 可以在“格式化模式”中使用“”,比如:%ty-%tm-%td中的三個(gè)格式符將格式化同一日期,即含有“”的格式符和它前面的格式符格式同一個(gè)日期,例如:String s = String.format(%ty年%tm月%td日,new Date();那么%tm和%td都格式化new Date(),因此字符串s就是:11年02月10日。,8. 6 日期的格式化,2 不同區(qū)域的星期格式 如果想用特定地區(qū)的星期格式來(lái)表示日期中的

50、星期,可以用format的重載方法: format (Locale locale,格式化模式,日期列表); 其中的參數(shù)locale是一個(gè)Locale類的實(shí)例,用于表示地域。 Locale類的static常量都是Locale對(duì)象,其中US是表示美國(guó)的static常量。 比如,假設(shè)當(dāng)前時(shí)間是2011-02-10,對(duì)于(%ta表示簡(jiǎn)稱的星期): String s = String.format(Locale.US,%ta(%tF),new Date(); 那么s是Thu(2011-02-10), 對(duì)于(%tA表示全稱的星期) String s = String.format(Locale.JAPAN

51、,%tA(%tF),new Date(); 那么s是木曜日(2011-02-10)。 注:如果format方法不使用Locale參數(shù)格式化日期,當(dāng)前應(yīng)用程序所在系統(tǒng)的地區(qū)設(shè)置是中國(guó),那么相當(dāng)于locale參數(shù)取Locale.CHINA。,8. 7 Math、BigInteger和Random類,1 . Math類 Math類在java.lang包中。Math類包含許多用來(lái)進(jìn)行科學(xué)計(jì)算的類方法,這些方法可以直接通過(guò)類名調(diào)用。另外,Math類還有兩個(gè)靜態(tài)常量,它們分別是: E 2.7182828284590452354和PI 3.14159265358979323846。 以下是Math類的常用類

52、方法: public static long abs(double a) 返回a的絕對(duì)值。 public static double max(double a,double b) 返回a、b的最大值。 public static double min(double a,double b) 返回a、b的最小值。 public static double random() 產(chǎn)生一個(gè)0到1之間的隨機(jī)數(shù)(不包括0和1)。 public static double pow(double a,double b) 返回a的b次冪。 public static double sqrt(double a) 返回

53、a的平方根。 public static double log(double a) 返回a的對(duì)數(shù)。 public static double sin(double a) 返回正弦值。 public static double asin(double a) 返回反正弦值。,8. 6 Math、BigInteger和Random類,2 BigInteger類 java.math包中的BigInteger類提供任意精度的整數(shù)運(yùn)算??梢允褂脴?gòu)造方法: public BigInteger(String val) 構(gòu)造一個(gè)十進(jìn)制的BigInteger對(duì)象。 以下是BigInteger類的常用類方法: pu

54、blic BigInteger add(BigInteger val) 返回當(dāng)前大整數(shù)對(duì)象與參數(shù)指定的大整數(shù)對(duì)象的和。 public BigInteger subtract(BigInteger val)返回當(dāng)前大整數(shù)對(duì)象與參數(shù)指定的大整數(shù)對(duì)象的差。 public BigInteger multiply(BigInteger val)返回當(dāng)前大整數(shù)對(duì)象與參數(shù)指定的大整數(shù)對(duì)象的積。 public BigInteger divide(BigInteger val)返回當(dāng)前大整數(shù)對(duì)象與參數(shù)指定的大整數(shù)對(duì)象的商。 public BigInteger remainder(BigInteger val)返

55、回當(dāng)前大整數(shù)對(duì)象與參數(shù)指定的大整數(shù)對(duì)象的余。 public int compareTo(BigInteger val) 返回當(dāng)前大整數(shù)對(duì)象與參數(shù)指定的大整數(shù)的比較結(jié)果,返回值是1、-1或0,分別表示當(dāng)前大整數(shù)對(duì)象大于、小于或等于參數(shù)指定的大整數(shù)。 public BigInteger pow(int a) 返回當(dāng)前大整數(shù)對(duì)象的a次冪。 public String toString() 返回當(dāng)前大整數(shù)對(duì)象十進(jìn)制的字符串表示。 public String toString(int p) 返回當(dāng)前大整數(shù)對(duì)象p進(jìn)制的字符串表示。 例題17 計(jì)算5的平方根以及兩個(gè)大整數(shù)的和與積,8. 7 Math、Big

56、Integer和Random類,3.Random類 復(fù)習(xí): 使用Math類調(diào)用其類方法random()返回一個(gè)0至1之間的隨機(jī)數(shù)(不包括0和1)。例如,下列代碼得到1至100之間的一個(gè)隨機(jī)整數(shù)(包括1和100), (int)(Math.random()*100)+1; 新內(nèi)容: Java提供了更為靈活的用于獲得隨機(jī)數(shù)的Random類(該類在java.util包中)。 Random類的如下構(gòu)造方法: public Random(); public Random(long seed);使用參數(shù)seek指定的種子創(chuàng)建一個(gè)Random對(duì)象 隨機(jī)數(shù)生成器random調(diào)用不帶參數(shù)的nextInt()方法:

57、 Random random=new Random(); random.nextInt(); 返回一個(gè)0至n之間(包括0,但不包括n)的隨機(jī)數(shù) 隨機(jī)數(shù)生成器random調(diào)用帶參數(shù)的nextInt(int m)方法(參數(shù)m必須取正整數(shù)值) 例如:random.nextInt(100);返回一個(gè)0至100之間的隨機(jī)整數(shù)(包括0,但不包括100)。 例如:隨機(jī)得到true和false兩個(gè)表示真和假的boolean值, 隨機(jī)數(shù)生成器random調(diào)用nextBoolean()方法 例如:random.nextBoolean();返回一個(gè)隨機(jī)boolean值。,例子18演示是從1-100之間隨機(jī)得到6個(gè)不同的數(shù),需要注意的是,對(duì)于具有相同種子的兩個(gè)Random對(duì)象,二者依次調(diào)用nextInt()方法獲取的隨機(jī)數(shù)序 列是相同的。,Example8_18.java,得到隨機(jī)數(shù)類GetRandomNumber,8. 8 數(shù)字格式化,1 Formatter 類_1 Formatter類提供了一個(gè)和C語(yǔ)言printf函數(shù)類似的format方法: format(格式化模式,值列表) 該方法按著“格式化模式”返回“值列表”的字符串表示。 Java已經(jīng)將format方法做為了String類的靜態(tài)方法,因此,程序可以直接使用String類調(diào)用forma

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論