版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章字符串本章要點(diǎn)掌握字符串的創(chuàng)建方式掌握字符串的常用操作掌握字符串的格式化理解正則表達(dá)式掌握常見正則表達(dá)式的定義掌握StringBuilder類的用法第6章字符串6.1創(chuàng)建字符串6.2字符串操作6.3格式化字符串6.4正則表達(dá)式6.5可變字符串主要內(nèi)容6.1創(chuàng)建字符串String類即字符串類型,并不是Java的基本數(shù)據(jù)類型,但可以像基本數(shù)據(jù)類型一樣使用。要?jiǎng)?chuàng)建字符串可以通過多種方式實(shí)現(xiàn)。1)可以通過為字符串變量賦值的方式來實(shí)例化字符串對(duì)象Strings=“good”;Sgood注意:聲明字符串變量必須經(jīng)過初始化或賦值后才能使用,否則編譯器會(huì)報(bào)出“變量未被初始化”錯(cuò)誤。6.1創(chuàng)建字符串2)在Java中用java.lang.String類的構(gòu)造方法來創(chuàng)建字符串變量。常用的構(gòu)造方法如下:String()創(chuàng)建一個(gè)String類型的對(duì)象,其內(nèi)容為空。String(chara[])使用指定的字符數(shù)組創(chuàng)建字符串對(duì)象。String(chara[],intoffset,intlength)使用指定的字符數(shù)組創(chuàng)建字符串對(duì)象,offset表示字符數(shù)組起始位置。length表示長(zhǎng)度。6.1創(chuàng)建字符串3)在Java中還可以通過調(diào)用String類的valueOf方法來實(shí)例化字符串對(duì)象。例如:intx=100; Strings=String.valueOf(x);6.2.1字符串連接6.2.2獲取字符串信息6.2.3字符串比較6.2.4字符串替換6.2.5字符串分割6.2.6大小寫轉(zhuǎn)換6.2.7取出首末空格6.2字符串操作6.2.1字符串連接字符串連接是字符串的基本操作之一,有兩種方式可以實(shí)現(xiàn):“+”String類的concat()方法為了簡(jiǎn)單起見通常使用“+”而不會(huì)調(diào)用方法。concat()方法的語法如下。publicStringconcat(Stringstr)6.2.1字符串連接【例6-1】分別使用“+”和concat()方法來連接字符串,并將結(jié)果輸出。Stringstr1="Hello"+"World!";Stringstr2="Hello".concat("World!");System.out.println("使用+連接字符串:"+str1);System.out.println("使用concat()方法:"+str2);6.2.1字符串連接Java中一句相連的字符串不能分開在兩行中寫:System.out.println(“Ilike
Java”)System.out.println("Ilike"+ "Java");×6.2.1字符串連接字符串同其它數(shù)據(jù)類型連接“Money”+1+2“Money”+(1+2)“Money12”“Money3”6.2.2獲取字符串信息使用String類中l(wèi)ength()方法,可以獲得當(dāng)前字符串中包含的Unicode代碼單元個(gè)數(shù)。通常情況下,即包含的字符個(gè)數(shù)。注意:空格也算字符。一個(gè)漢字的長(zhǎng)度也只有1。注意:區(qū)分String類的length()方法與數(shù)組的length屬性。1.獲取字符串長(zhǎng)度Stringname="一顆椰子樹";System.out.println("字符串:"
+name+ "\t長(zhǎng)度為:"
+name.length());1.獲取字符串長(zhǎng)度2.獲取指定字符的索引位置String類的indexOf()和lastIndexOf()方法都可以獲得給定的字符/字符串在目標(biāo)字符串中的索引位置,如果未找到匹配的字符或字符串則會(huì)返回-1。indexOf()方法返回第一個(gè)符合要求的索引值
publicintindexOf(Stringstr)lastIndexOf()返回最后一個(gè)符合要求索引值
publicintlastIndexOf(Stringstr)2.獲取指定字符的索引位置Stringstr="Wearestudents";intindex=str.indexOf("a");intlastindex=str.lastIndexOf('e');System.out.println("a在"+str+"中的起始位置是:" +index);System.out.println("e在"+str+"中的最后位置是:" +lastindex);3.獲取指定索引位置的字符String類的charAt()方法可以獲得指定索引位置的字符,該方法的語法如下。
publiccharcharAt(intindex)index:目標(biāo)字符的索引,其值在0和字符串長(zhǎng)度-1之間。Stringstr="helloword";charmychar=str.charAt(6);取子串通過String類的substring()方法可對(duì)字符串進(jìn)行截取。1)substring(intbeginIndex)該方法返回的是從指定的索引位置開始截取直到該字符串的結(jié)尾的子串。Stringstr="HelloWord"; Stringsubstr=str.substring(3);取子串2)substring(intbeginIndex,intendIndex)該方法返回的是從字符串某一索引位置開始截取至某一索引位置結(jié)束(不包括結(jié)束位置)的子串。Stringstr="HelloWord"; Stringsubstr=str.substring(0,3);注意:endIndex不要越界[beginIndex,str.length()]6.2.3字符串比較String類的equals()方法可以用來比較兩個(gè)字符串的內(nèi)容是否完全相同
publicbooleanequals(ObjectanObject)equalsIgnoreCase()方法可以在忽略大小寫的情況下比較兩個(gè)字符串的內(nèi)容是否相同publicbooleanequalsIgnoreCase(StringanotherString)1.比較全部?jī)?nèi)容1.比較全部?jī)?nèi)容Strings1=newString("abc");Strings2=newString("ABC");booleanb=s1.equals(s2);
booleanb2=s1.equalsIgnoreCase(s2); System.out.println(s1+"equals"+s2+":"+b);System.out.println(s1+"equalsIgnoreCase"+s2+ ":"+b2);Java的字符串池Stringstr1="abc";Stringstr2="abc";Stringstr3=newString("abc");System.out.println(str1==str2);System.out.println(str1==str3);在進(jìn)行字符串比較時(shí),通過==比較對(duì)象時(shí),比較的是兩個(gè)對(duì)象使用的內(nèi)存地址是否相同;當(dāng)使用equals()方法比較兩個(gè)對(duì)象時(shí),只要兩個(gè)對(duì)象的內(nèi)容相同,結(jié)果就為true,否則為false。Java虛擬機(jī)為了提高字符串應(yīng)用效率,提供了字符串池來保存字符串常量,str1創(chuàng)建字符串常量“abc”,這時(shí)會(huì)先檢測(cè)字符串池中是否包含該字符串,如果不包含,則創(chuàng)建字符串常量保存到字符串池中。str2也賦值為字符串“abc”,這是由于字符串池中已經(jīng)存在該字符串,所以不再創(chuàng)建,也就是說這兩個(gè)變量引用同一個(gè)字符串,那么它們的內(nèi)存地址也是相同的,所以str1==str2成立。但是使用new關(guān)鍵字創(chuàng)建的字符串會(huì)新開辟內(nèi)存空間所以str1==str3不成立。Java的字符串池2.比較開頭結(jié)尾String類的startsWith()方法可以用來判斷是否以給定字符串開頭,語法如下。publicbooleanstartsWith(Stringprefix)prefix:字符串前綴String類的endsWith()方法可以用來判斷是否已給定字符串結(jié)尾,語法如下。publicbooleanendsWith(Stringsuffix)suffix:字符串后綴2.比較開頭結(jié)尾Stringnum1="22045612";booleanb=num1.startsWith("22");booleanb2=num1.endsWith("78");System.out.println(“字符串num1是以‘22’開始的 嗎?"
+b);System.out.println(“字符串num1是以‘78’結(jié)束的 嗎?"
+b2);按字典順序比較兩個(gè)字符串compareTo()方法按字典順序比較兩個(gè)字符串,該比較基于字符串中各個(gè)字符Unicode值。如果按字典順序此String對(duì)象位于參數(shù)字符串之前,則比較結(jié)果為一個(gè)負(fù)整數(shù);如果按字典順序此String對(duì)象位于參數(shù)字符串之后,則比較結(jié)果為一個(gè)正整數(shù);如果這兩個(gè)字符串相等,則結(jié)果為0。pareTo(Stringotherstr)pareToIgnoreCase(Stringotherstr)str、otherstr:參加比較的兩個(gè)字符串對(duì)象。Stringstr=newString("b");Stringstr2=newString(“a”); Stringstr3=newString("c");System.out.println(str+"compareTo"+str2 +":"+pareTo(str2));System.out.println(str+"compareTo"+str3 +":"+pareTo(str3));6.2.4字符串替換String類的replace()方法可以替換字符串內(nèi)全部指定子字符串為另一字符串:publicStringreplace(CharSequenceoldstr,CharSequencenewstr)replace()方法返回的結(jié)果是一個(gè)新的字符串。如果字符串oldChar沒有出現(xiàn)在該對(duì)象表達(dá)式中的字符串序列中,則將原字符串返回。如果要替換的字符oldstr在字符串中重復(fù)出現(xiàn)多次,replace()方法會(huì)將所有oldstr全部替換成newstr。Stringstr="javaproject";Stringnewstr=str.replace("j","J");此時(shí),newstr的值為:JavaproJect。需要注意的是,要替換的字符oldstr的大小寫要與原字符串中字符的大小寫保持一致,否則不能成功的替換。Stringnewstr=str.replace("P","t");6.2.4字符串替換還可以用該方法實(shí)現(xiàn)串中字符(子串)的刪除6.2.5字符串分割String類的split()方法可以用來分割字符串,也可以限定拆分的次數(shù)。 publicString[]split(Stringregex) publicString[]split(Stringsign,intlimit)
regex:用于分割字符串的符號(hào)或正則表達(dá)式limit:用來限制返回?cái)?shù)組中的元素個(gè)數(shù)注意:沒有統(tǒng)一的對(duì)字符進(jìn)行分割的符號(hào)。
如果想定義多個(gè)分隔符??墒褂梅?hào)“|”。6.2.5字符串分割【例6-5】輸出給定字符串中單詞的個(gè)數(shù)。Stringmessage="Sosayweall!";String[]split=message.split("");System.out.println(message+"中共有"+ split.length+"個(gè)單詞!");6.2.5字符串分割Stringstr=newString("abc,def,ghi,gkl");String[]newstr=str.split(",");for(inti=0;i<newstr.length;i++){ System.out.println(newstr[i]);}String[]newstr2=str.split(",",2);for(intj=0;j<newstr2.length;j++){ System.out.println(newstr2[j]);}6.2.6大小寫轉(zhuǎn)換String類的toUpperCase()和toLowerCase()方法可以用來將字符串轉(zhuǎn)換為全部大寫和全部小寫的形式,語法如下。 publicStringtoUpperCase() publicStringtoLowerCase()如果字符串中沒有應(yīng)該被轉(zhuǎn)換的字符,則將原字符串返回。否則將返回一個(gè)新的字符串,新字符長(zhǎng)度與原字符長(zhǎng)度相同?!纠?-6】將給定的字符串轉(zhuǎn)換為大寫和小寫形式并輸出。6.2.6大小寫轉(zhuǎn)換Stringmessage="Sosayweall!";System.out.println(message);System.out.println("轉(zhuǎn)換為大寫形式:"+ message.toUpperCase());System.out.println(message);System.out.println("轉(zhuǎn)換為小寫形式:"+ message.toLowerCase());6.2.7去除首末空格String類的trim()方法可以用來去除字符串首末空格。在獲得用戶輸入信息時(shí),通常會(huì)使用該方法,其語法如下。 publicStringtrim()【例6-7】去掉給定字符串的首末空格并輸出結(jié)果。6.2.7去除首末空格Stringmessage="Sosayweall!";System.out.println("字符串長(zhǎng)度:"+ message.length());System.out.println("去除空格后字符串長(zhǎng)度:"+ message.trim().length());【例】小寫字母字符串循環(huán)右移3位進(jìn)行加密字符串
字符數(shù)組Stringword="abcxyz";char[]arr=word.toCharArray();for(inti=0;i<arr.length;i++){if(arr[i]>='a'&&arr[i]<'x') arr[i]=(char)(arr[i]+3);elsearr[i]=(char)(arr[i]+3-26);}word=newString(arr);System.out.println(word);6.3.1格式化方法6.3.2日期格式化6.3.3時(shí)間格式化6.3.4日期時(shí)間組合格式化6.3.5常規(guī)類型格式化6.3格式化字符串6.3.1格式化方法String類的format()方法可以用來格式化字符串,其語法如下。 publicstaticStringformat(String
format,Object...args)format:使用了指定格式的字符串。args:與format字符串中對(duì)應(yīng)的參數(shù)值。使用format()方法對(duì)日期進(jìn)行格式化時(shí),會(huì)用到日期格式化轉(zhuǎn)換符。6.3.2日期格式化P77Datedate=newDate(); Stringyear=String.format("
%tY",date); Stringmonth=String.format("%tB",date);Stringday=String.format("%td",date);System.out.println("今年是:"+year+"年");System.out.println("現(xiàn)在是:"+month);System.out.println("今天是:"+day+"號(hào)");6.3.2日期格式化時(shí)間格式化轉(zhuǎn)換符可以將時(shí)間格式化為時(shí)、分、秒、毫秒。6.3.3時(shí)間格式化P78Datedate=newDate();Stringhour=String.format("%tH",date);Stringminute=String.format("%tM",date);Stringsecond=String.format("%tS",date);System.out.println("現(xiàn)在是:"+hour+"時(shí)"+ minute+"分"+second+"秒");6.3.3時(shí)間格式化因?yàn)槿掌谂c時(shí)間經(jīng)常是同時(shí)出現(xiàn)的,所以還定義了各種日期和時(shí)間組合的格式。6.3.4日期時(shí)間組合格式化P79Datedate=newDate();Stringtime=String.format("%tc",date);Stringform=String.format("%tF",date);System.out.println("全部的時(shí)間信息是:"
+ time);System.out.println("年-月-日格式:"+form);6.3.4日期時(shí)間組合格式化常規(guī)類型的格式化轉(zhuǎn)換符可以實(shí)現(xiàn)對(duì)常規(guī)類型的數(shù)據(jù)進(jìn)行格式化。6.3.5常規(guī)類型格式化P80Stringstr=String.format("%d",400/2);Stringstr2=String.format("%b",3>5);Stringstr3=String.format("%x",200);Stringstr4=String.format("%.2f",1.2685);System.out.println("400的一半是:"+str);System.out.println("3>5正確嗎:"+str2);System.out.println("200的16進(jìn)制數(shù)是:"+str3);System.out.println("1.2685保留兩位小數(shù)是:"+str4);6.3.5常規(guī)類型格式化6.4.1判斷是否符合正則表達(dá)式6.4.2正則表達(dá)式的元字符6.4.3正則表達(dá)式的限定符6.4.4方括號(hào)中元字符的含義6.4正則表達(dá)式正則表達(dá)式是事先定義好的一些特殊字符及這些特殊字符的組合,組成一個(gè)“規(guī)則字符串”。用來表達(dá)對(duì)字符串的過濾邏輯,通常被用于判斷語句中,來檢查某一字符串是否滿足某一格式。6.4正則表達(dá)式6.4.1判斷是否符合正則表達(dá)式String類的matches()方法提供了比較字符串與給定正則表達(dá)式是否匹配的功能,該方法的語法如下 publicbooleanmatches(Stringregex)regex:用于比較的正則表達(dá)式。由一些含有特殊意義的字符組成的字符串,這些含有特殊意義的字符稱為元字符。6.4.2正則表達(dá)式的元字符P816.4.2正則表達(dá)式的元字符【例6-16】判斷給定的字符串是否符合特定的正則表達(dá)式。大寫字母+3個(gè)小寫字母+3個(gè)數(shù)字。Stringregex="\\p{Upper}\\p{Lower}\\p{Lower}
\\p{Lower}\\d\\d\\d";Stringmessage1="SWJT001";Stringmessage2="Swjt001";booleanresult1=message1.matches(regex);booleanresult2=message2.matches(regex);System.out.println(message1+"合法:"+result1);System.out.println(message2+"合法:"+result2);在使用正則表達(dá)式時(shí),如果要某一類型的元字符多次輸出,逐個(gè)輸入就相當(dāng)麻煩,可以使用正則表達(dá)式的限定元字符來重復(fù)次數(shù)。6.4.3正則表達(dá)式的限定符P83Stringregex="\\w{1,}\\@\\w{1,}\\.{1}\\w{1,}";Stringstr1="aaa@"; Stringstr2="aaaa"; Stringstr3="aaaaa@111.com";System.out.println(str1.matches(regex));System.out.println(str2.matches(regex));System.out.println(str3.matches(regex));6.4.3正則表達(dá)式的限定符在正則表達(dá)式中還可以用方括號(hào)把多個(gè)字符括起來表示一個(gè)元字符,該元字符可代表方括號(hào)中的任何一個(gè)字符。6.4.4方括號(hào)中元字符的含義P83【例6-18】判斷給定字符串是否為合法手機(jī)號(hào)6.4.4方括號(hào)中元字符的含義Stringregex="^(13\\d|15[036-9]|18[89])\\d{8}$";Stringnumber=;booleanmatch=number.matches(regex);System.out.println(number+"\n合法手機(jī)號(hào)碼:" +match);【例】統(tǒng)計(jì)漢字個(gè)數(shù)6.4.4方括號(hào)中元字符的含義Stringm="我愛學(xué)java";Stringregex="^[\u4e00-\u9fff]$";intc=0;for(inti=0;i<m.length();i++){if((""+m.charAt(i)).matches(regex)){c++;}}System.out.println(m+"中包含"+c+"個(gè)漢字");6.5可變字符串使用Java中的String類創(chuàng)建字符串,它的長(zhǎng)度是固定的,其內(nèi)容不可以修改,即每次“修改”都相當(dāng)于創(chuàng)建一個(gè)新的字符串。這在大量操作字符串的場(chǎng)合性能并不理想。為了解決這個(gè)問題,在API中提供了StringBuilder類,使用它來創(chuàng)建的字符串,內(nèi)容可以實(shí)現(xiàn)真正意義上的修改。Stringstr=
""; //創(chuàng)建空字符串longstarTime=System.currentTimeMillis(); //定義對(duì)字符串執(zhí)行操作的起始時(shí)間for(inti=0;i<10000;i++){
str=str+i; //循環(huán)追加字符串}longendTime=System.currentTimeMillis(); //定義對(duì)字符串操作后的時(shí)間longtime=endTime-starTime; //計(jì)算對(duì)字符串執(zhí)行操作的時(shí)間System.out.println("Sting消耗時(shí)間:"+time); 6.5可變字符串StringBuffer類對(duì)象是可變的字符串,有改變字符串的若干方法。StringBuffer類構(gòu)造函數(shù)StringBuffer()StringBuffer(intlength)//設(shè)置初始容量StringBuffer(Strings)//設(shè)置初始值StringBuffer類方法StringtoString()//轉(zhuǎn)換為String類型字符串voidsetCharAt(int
index,charc)//修改字符6.5可變字符串新創(chuàng)建的StringBuilder對(duì)象初始容量是16個(gè)字符。可以自行指定初始長(zhǎng)度。如果附加的字符超過可容納的長(zhǎng)度,則StringBuilder對(duì)象將自動(dòng)增加長(zhǎng)度以容納被附加的字符。若要使用StringB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高科技研發(fā)企業(yè)參股合作協(xié)議范本3篇
- 2025年度醫(yī)療設(shè)備產(chǎn)品試用及醫(yī)療機(jī)構(gòu)采購協(xié)議4篇
- 二零二五年度留學(xué)家庭財(cái)務(wù)規(guī)劃服務(wù)協(xié)議4篇
- 2024運(yùn)動(dòng)員參賽合同協(xié)議
- 2025年度廠房裝修環(huán)保驗(yàn)收與后續(xù)維護(hù)服務(wù)協(xié)議4篇
- 2025年度房地產(chǎn)臨時(shí)工勞動(dòng)合同書模板(二零二五版)4篇
- 二零二五版錘式破碎機(jī)銷售代理與區(qū)域市場(chǎng)拓展合同3篇
- 專賣店臨時(shí)聘用協(xié)議范本版
- 二零二五年度無人機(jī)植保作業(yè)效果評(píng)估合同2篇
- 2025年度養(yǎng)老產(chǎn)業(yè)項(xiàng)目合作協(xié)議范本3篇
- 給男友的道歉信10000字(十二篇)
- 2020年高級(jí)統(tǒng)計(jì)實(shí)務(wù)與案例分析真題及答案
- 全面質(zhì)量管理(TQM)基本知識(shí)
- 練字本方格模板
- 產(chǎn)品供貨質(zhì)量保障措施
- 電力電纜高頻局放試驗(yàn)報(bào)告
- 《老山界》第1第2課時(shí)示范公開課教學(xué)PPT課件【統(tǒng)編人教版七年級(jí)語文下冊(cè)】
- JJG 517-2016出租汽車計(jì)價(jià)器
- JJF 1914-2021金相顯微鏡校準(zhǔn)規(guī)范
- GB/T 32045-2015節(jié)能量測(cè)量和驗(yàn)證實(shí)施指南
- GB/T 10001.6-2021公共信息圖形符號(hào)第6部分:醫(yī)療保健符號(hào)
評(píng)論
0/150
提交評(píng)論