版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第6章字符串和正則表達(dá)式章字符串和正則表達(dá)式 本章導(dǎo)讀本章導(dǎo)讀1. String類2. StringBuffer類3. StringTokenizer類4. 正則表達(dá)式與模式匹配5元字符模式6限定符模式7模式的邏輯或6.1 String類類 JavaJava使用使用java.langjava.lang包中的包中的StringString類來創(chuàng)建一個(gè)字符串類來創(chuàng)建一個(gè)字符串變量,因此字符串變量是類類型變量,是一個(gè)對(duì)象。變量,因此字符串變量是類類型變量,是一個(gè)對(duì)象。 1 1字符串常量字符串常量 如 :你好、1234.987、weqweo。 2 2創(chuàng)建字符串對(duì)象創(chuàng)建字符串對(duì)象 使用String類的
2、構(gòu)造方法創(chuàng)建字符串對(duì)象: 例如: String s;String s; s=new String(we are students) s=new String(we are students); 也可以用一個(gè)已創(chuàng)建的字符串創(chuàng)建另一個(gè)字符串,如: String tom=new String(s);String tom=new String(s); StringString類還有兩個(gè)較常用構(gòu)造方法:類還有兩個(gè)較常用構(gòu)造方法: (1 1)String (char a)String (char a):用一個(gè)字符數(shù)組:用一個(gè)字符數(shù)組a a 創(chuàng)建一個(gè)字符創(chuàng)建一個(gè)字符串對(duì)象,如:串對(duì)象,如: char a=b
3、,o,y;char a=b,o,y; String s=new String(a); String s=new String(a); (2 2)String(char a,int startIndex,int count)String(char a,int startIndex,int count):提?。禾崛∽址麛?shù)組字符數(shù)組a a 中的一部分字符創(chuàng)建一個(gè)字符串對(duì)象中的一部分字符創(chuàng)建一個(gè)字符串對(duì)象,參數(shù)startIndex和count分別指定在a中提取字符的起始位置和從該位置開始截取的字符個(gè)數(shù),例如: char a=s,t,b,u,s,n;char a=s,t,b,u,s,n; String
4、s=new String(a,2,3); String s=new String(a,2,3); 3 3String String 類的常用方法類的常用方法 (1 1)public int length()public int length() 使用使用String String 類中的類中的length()length()方法可以方法可以獲取一個(gè)字符串的長度獲取一個(gè)字符串的長度 (2 2)public boolean equals(String s)public boolean equals(String s) 字符串對(duì)象調(diào)用字符串對(duì)象調(diào)用StringString類中的類中的equalseq
5、uals方法,比較當(dāng)前字符串對(duì)象的實(shí)體是否方法,比較當(dāng)前字符串對(duì)象的實(shí)體是否與參數(shù)指定的字符串與參數(shù)指定的字符串s s的實(shí)體相同的實(shí)體相同 class StringString()String(String s). String(char a ). String(char a,int startIndex,int count).public int length() int n; .return n; public boolean equals(String s) boolean b; . return b; .public class Example public static void m
6、ain(String args ) String x=new String(skldjflkdfkl); int y; y=x.length(); System.out.println(字符串+x+的長度為:+y); (3 3)public boolean startsWith(String s)public boolean startsWith(String s)、public public boolean endsWith(String s)boolean endsWith(String s)方法方法 字符串對(duì)象調(diào)用字符串對(duì)象調(diào)用startsWith(String s)startsWith
7、(String s)方法,判斷當(dāng)前字方法,判斷當(dāng)前字符串對(duì)象的前綴是否是參數(shù)指定的字符串符串對(duì)象的前綴是否是參數(shù)指定的字符串s s public class Example public static void main(String args ) String x=new String(skldjflkdfkl); String y=new String(skldjf1kdfkl); if(x.equals(y) System.out.println(字符串字符串+x+和字符串和字符串+y+相同。相同。); else System.out.println(字符串字符串+x+和字符串和字符串+
8、y+不相同。不相同。); (4 4)public int compareTopublic int compareTo(String sString s)方法)方法 字符串對(duì)象可以使用字符串對(duì)象可以使用StringString類中的類中的compareTocompareTo(String sString s)方)方法,按字典序與參數(shù)法,按字典序與參數(shù)s s指定的字符串比較大小。如果當(dāng)前字符串指定的字符串比較大小。如果當(dāng)前字符串與與s s相同,該方法返回值相同,該方法返回值0 0;如果當(dāng)前字符串對(duì)象大于;如果當(dāng)前字符串對(duì)象大于s s,該方法,該方法返回正值;如果小于返回正值;如果小于s s,該方法
9、返回負(fù)值。,該方法返回負(fù)值。(5 5)public int indexOf (String s)public int indexOf (String s) 字符串調(diào)用方法字符串調(diào)用方法indexOf (String s)indexOf (String s)從當(dāng)前字符串的頭開始檢從當(dāng)前字符串的頭開始檢索字符串索字符串s s,并返回首次出現(xiàn),并返回首次出現(xiàn)s s的位置。如果沒有檢索到字符串的位置。如果沒有檢索到字符串s s,該方法返回的值是該方法返回的值是-1-1。如果沒有檢索到字符串。如果沒有檢索到字符串s s,該方法返回的,該方法返回的值是值是-1-1。字符串調(diào)用。字符串調(diào)用lastIndex
10、Of (String s)lastIndexOf (String s)方法從當(dāng)前字符串方法從當(dāng)前字符串的頭開始檢索字符串的頭開始檢索字符串s s,并返回最后出現(xiàn),并返回最后出現(xiàn)s s的位置。如果沒有檢索的位置。如果沒有檢索到字符串到字符串s s,該方法返回的值是,該方法返回的值是-1-1。 (6 6)public String substring(int startpoint)public String substring(int startpoint) 字符串對(duì)象調(diào)用該方法獲得一個(gè)當(dāng)前字符串的子串,該子字符串對(duì)象調(diào)用該方法獲得一個(gè)當(dāng)前字符串的子串,該子串是從當(dāng)前字符串的串是從當(dāng)前字符串的st
11、artpointstartpoint處截取到最后所得到的字符處截取到最后所得到的字符串。字符串對(duì)象調(diào)用串。字符串對(duì)象調(diào)用substring(int start ,int end)substring(int start ,int end)方法方法獲得一個(gè)當(dāng)前字符串的子串,該子串是從當(dāng)前字符串的獲得一個(gè)當(dāng)前字符串的子串,該子串是從當(dāng)前字符串的startstart處截取到處截取到endend處所得到的字符串,但不包括處所得到的字符串,但不包括endend處所對(duì)處所對(duì)應(yīng)的字符。應(yīng)的字符。 (7 7)public String replaceAll(String old ,String public S
12、tring replaceAll(String old ,String new)new) 字符串對(duì)象字符串對(duì)象s s調(diào)用該方法可以獲得一個(gè)串對(duì)象,這個(gè)串對(duì)象調(diào)用該方法可以獲得一個(gè)串對(duì)象,這個(gè)串對(duì)象是通過用參數(shù)是通過用參數(shù)newnew指定的字符串替換指定的字符串替換s s中由中由oldold指定的所有字指定的所有字符串而得到的字符串。符串而得到的字符串。 (8 8)public String trim()public String trim() 一個(gè)字符串一個(gè)字符串s s通過調(diào)用方法通過調(diào)用方法trim()trim()得到一個(gè)字符串對(duì)象,該得到一個(gè)字符串對(duì)象,該字符串對(duì)象是字符串對(duì)象是s s去掉
13、前后空格后的字符串。去掉前后空格后的字符串。public class Example public static void main(String args ) String x=new String( abcdabefg); String a=new String(); String b=new String(); String c=new String(); String d=new String(); a=x.substring(3,5); b=x.substring(6); c=x.replaceAll(ab,xy); d=x.trim(); System.out.println(字符
14、串字符串a(chǎn)的值:的值:+a); System.out.println(字符串字符串b的值:的值:+b); System.out.println(字符串字符串c的值:的值:+c); System.out.println(字符串字符串d的值:的值:+d); 5 5字符串與基本數(shù)據(jù)的相互轉(zhuǎn)化字符串與基本數(shù)據(jù)的相互轉(zhuǎn)化 java.lang包中的Integer類調(diào)用其類方法: public static int parseInt(String s)public static int parseInt(String s) 可以將“數(shù)字”格式的字符串,如“12387”,轉(zhuǎn)化為int型數(shù)據(jù)。 類似地,使用ja
15、va.lang包中的Byte、Short、Long、Float、Double類調(diào)相應(yīng)的類方法: public static byte parseByte(String s)public static byte parseByte(String s) public static short parseShort(String s)public static short parseShort(String s) public static long parseLong(String s)public static long parseLong(String s) public static dou
16、ble parseDouble(String s)public static double parseDouble(String s) 可以將“數(shù)字”格式的字符串,轉(zhuǎn)化為相應(yīng)的基本數(shù)據(jù)類型。 有時(shí),我們需要將數(shù)字轉(zhuǎn)化為字符串,可以使用String 類的下列類方法: public String valueOfpublic String valueOf(byte nbyte n) public String valueOfpublic String valueOf(int nint n) public String valueOfpublic String valueOf(long nlong n
17、) public String valueOfpublic String valueOf(float nfloat n) public String valueOf public String valueOf(double ndouble n) 6 6對(duì)象的字符串表示對(duì)象的字符串表示 在子類中我們講過,所有的類都默認(rèn)是java.lang包中Object類的子類或間接子類。Object類有一個(gè)public 方法toString(),一個(gè)對(duì)象通過調(diào)用該方法可以獲得該對(duì)象的字符串表示。import java.util.*;public class Example public static void
18、 main(String args ) Scanner reader=new Scanner(System.in); System.out.print(請(qǐng)輸入一串?dāng)?shù)字:請(qǐng)輸入一串?dāng)?shù)字:); int n=reader.nextInt(); String s=new String(); s=String.valueOf(n); int m=0; for(int i=0;is.length();i+) m+=Integer.parseInt(s.substring(i,i+1); System.out.println(各位數(shù)字的和是:各位數(shù)字的和是:+m); 7 7字符串與字符數(shù)組字符串與字符數(shù)組我
19、們已經(jīng)知道String 類的構(gòu)造方法:String(char)和String(char,int offset,int length)分別用數(shù)組a中的全部字符和部分字符創(chuàng)建字符串對(duì)象。StringString類也提供了將字符串類也提供了將字符串存放到數(shù)組中的方法:存放到數(shù)組中的方法:(1 1) public void getChars public void getChars( (int start,int end,char c,int offset int start,int end,char c,int offset ) ) 字符串調(diào)用getChars方法將當(dāng)前字符串中的一部分字符復(fù)制到參數(shù)
20、c指定的數(shù)組中,將字符串中從位置start到end-1位置上的字符復(fù)制的數(shù)組c中,并從數(shù)組c的offset處開始存放這些字符。需要注意的是,必須保證數(shù)組c能容納下要被復(fù)制的字符。public class Examplepublic static void main(String args)String s1=we are students;char c=new char20;s1.getChars(7,15,c,0 );for(int i=0;i8;i+)System.out.print(ci);System.out.println(); (2 2) public char toCharArr
21、ay() public char toCharArray() 字符串對(duì)象調(diào)用該方法可以初始化一個(gè)字符數(shù)組,該數(shù)組的長度與字符串的長度相等,并將字符串對(duì)象的全部字符復(fù)制到該數(shù)組中。public class Examplepublic static void main(String args)String s1= we are students;char c=new char20;c=s1.toCharArray() ;for(int i=0;is1.length();i+)System.out.print(ci);System.out.println(); 6.2 StringBuffer 類類
22、 前面我們學(xué)習(xí)了String字符串對(duì)象,String類創(chuàng)建的字符串對(duì)象是不可修改的,也就是說,String字符串不能修改、刪除或替換字符串中的某個(gè)字符,即String對(duì)象一旦創(chuàng)建,那么實(shí)體是不可以再發(fā)生變化的在這一節(jié),我們介紹StringBufferStringBuffer類,該類能創(chuàng)建該類能創(chuàng)建可修改的字符串序列,也就是說,該類的對(duì)象的實(shí)體的內(nèi)可修改的字符串序列,也就是說,該類的對(duì)象的實(shí)體的內(nèi)存空間可以自動(dòng)的改變大小,便于存放一個(gè)可變的字符串存空間可以自動(dòng)的改變大小,便于存放一個(gè)可變的字符串。6.2 StringBuffer 類類 1StringBufferStringBuffer類的構(gòu)造方
23、法類的構(gòu)造方法 StringBuffer類有三個(gè)構(gòu)造方法: (1)StringBuffer( )StringBuffer( ) (2)StringBuffer(int size)StringBuffer(int size) (3)StringBuffer(String s)StringBuffer(String s)2StringBufferStringBuffer類的常用法類的常用法 (1)apend( String str ) apend( String str ) (2)char charAt(int n)char charAt(int n) (3)void setCharAt(int
24、n,char ch)void setCharAt(int n,char ch) (4)StringBuffer insert(int index, String str)StringBuffer insert(int index, String str) (5)public StringBuffer reverse( )public StringBuffer reverse( ) (6)StringBuffer delete(int startIndex,int endIndex)StringBuffer delete(int startIndex,int endIndex) (7)Strin
25、gBuffer replace( int startIndex, int endIndex,String str )StringBuffer replace( int startIndex, int endIndex,String str )public class Examplepublic static void main(String args)StringBuffer str=new StringBuffer(a1b2c3d4);System.out.println(str);str.append(e5f6);System.out.println(str);char c=str.cha
26、rAt(2);System.out.println(c);str.setCharAt(2,B);System.out.println(str);str.insert(3,RRRRR);System.out.println(str);str.replace(3,8,ZZZZZ);System.out.println(str);str.delete(3,8);System.out.println(str);str.reverse();System.out.println(str); 6.3 StringTokenizer 類類 當(dāng)我們分析一個(gè)字符串并將字符串分解字符串分解成可被獨(dú)立使用的單詞單詞時(shí)
27、,可以使用java.util包中的StringTokenizer類,該類有兩個(gè)常用的構(gòu)造方法: 1StringTokenizer(String s) 為字符串s構(gòu)造一個(gè)分析器。使用默認(rèn)的分隔符集合,即空格符(若干個(gè)空格被看做一個(gè)空格)、換行符、回車符、Tab符、進(jìn)紙符。 2StringTokenizer(String s, String delim) 為字符串s構(gòu)造一個(gè)分析器,參數(shù)dilim中的字符被作為分隔符。6.3 StringTokenizer 類類boolean hasMoreTokens()返回是否還有分隔符。String nextToken()返回從當(dāng)前位置到下一個(gè)分隔符的字符串i
28、nt countTokens()返回nextToken方法被調(diào)用的次數(shù)。import java.util.*;public class Example public static void main (String args ) Scanner reader=new Scanner(System.in); String x=reader.nextLine(); StringTokenizer fenxi=new StringTokenizer(x); for(int i=0;fenxi.hasMoreTokens();i+) String str=fenxi.nextToken(); Syst
29、em.out.println(str); import java.util.*;public class Example public static void main (String args ) Scanner reader=new Scanner(System.in); String x=reader.nextLine(); StringTokenizer fenxi=new StringTokenizer(x); System.out.println(該句共有該句共有+fenxi.countTokens()+個(gè)單詞,它們分別是:個(gè)單詞,它們分別是:); for(int i=0;fenx
30、i.hasMoreTokens();i+) String str=fenxi.nextToken(); System.out.println(str); import java.util.*;public class Example public static void main (String args ) String mess=整數(shù)部分,小數(shù)部分; Scanner reader=new Scanner(System.in); double x=reader.nextDouble(); String s=String.valueOf(x); StringTokenizer fenxi=ne
31、w StringTokenizer(s,.); for(int i=0;fenxi.hasMoreTokens();i+) String str=fenxi.nextToken(); System.out.println(messi+:+str); 在在java中有中有3個(gè)類來負(fù)責(zé)字符的操作。個(gè)類來負(fù)責(zé)字符的操作。 1.Character 是進(jìn)行單個(gè)字符操作的是進(jìn)行單個(gè)字符操作的 2.String 對(duì)一串字符進(jìn)行操作。不可變類。對(duì)一串字符進(jìn)行操作。不可變類。 3.StringBuffer 也是對(duì)一串字符進(jìn)行操作,但是可變類。也是對(duì)一串字符進(jìn)行操作,但是可變類。 String: 是對(duì)象不是原始類
32、型是對(duì)象不是原始類型. 為不可變對(duì)象為不可變對(duì)象,一旦被創(chuàng)建一旦被創(chuàng)建,就不能修改它的值就不能修改它的值. 對(duì)于已經(jīng)存在的對(duì)于已經(jīng)存在的String對(duì)象的修改都是重新創(chuàng)建一個(gè)新的對(duì)象對(duì)象的修改都是重新創(chuàng)建一個(gè)新的對(duì)象,然后把新的值保存進(jìn)去然后把新的值保存進(jìn)去. String 是是final類類,即不能被繼承即不能被繼承. StringBuffer: 是一個(gè)可變對(duì)象是一個(gè)可變對(duì)象,當(dāng)對(duì)他進(jìn)行修改的時(shí)候不會(huì)像當(dāng)對(duì)他進(jìn)行修改的時(shí)候不會(huì)像String那樣重新建立對(duì)象那樣重新建立對(duì)象 它只能通過構(gòu)造函數(shù)來建立它只能通過構(gòu)造函數(shù)來建立, StringBuffer sb = new StringBuffer
33、(); note:不能通過付值符號(hào)對(duì)他進(jìn)行付值不能通過付值符號(hào)對(duì)他進(jìn)行付值. sb = welcome to here!;/error 對(duì)象被建立以后對(duì)象被建立以后,在內(nèi)存中就會(huì)分配內(nèi)存空間在內(nèi)存中就會(huì)分配內(nèi)存空間,并初始保存一個(gè)并初始保存一個(gè)null.向向StringBuffer 中付值的時(shí)候可以通過它的中付值的時(shí)候可以通過它的append方法方法. sb.append(hello); 字符串連接操作中字符串連接操作中StringBuffer的效率要比的效率要比String高高: String str = new String(welcome to ); str += here; 的處理步驟
34、實(shí)際上是通過建立一個(gè)的處理步驟實(shí)際上是通過建立一個(gè)StringBuffer,然后調(diào)用然后調(diào)用append(),最后最后 再將再將StringBuffer toSting(); 這樣的話這樣的話String的連接操作就比的連接操作就比StringBuffer多出了一些附加操作多出了一些附加操作,當(dāng)然效率上要打折扣當(dāng)然效率上要打折扣. 并且由于并且由于String 對(duì)象是不可變對(duì)象對(duì)象是不可變對(duì)象,每次操作每次操作Sting 都會(huì)重新建立新的對(duì)象來保存新的值都會(huì)重新建立新的對(duì)象來保存新的值. 這樣原來的對(duì)象就沒用了這樣原來的對(duì)象就沒用了,就要被垃圾回收就要被垃圾回收.這也是要影響性能的這也是要影響
35、性能的.import java.util.regex.*;class Examplepublic static void main(String args) String s1=0A1A2A3A4A5A6A7A8A9A; String s2=5A6; String s3=5AA6; if(s1.contains(s2) System.out.println(字符串字符串+s1+中包含字符串中包含字符串+s2); else System.out.println(字符串字符串+s1+中不包含字符串中不包含字符串+s2); if(s1.contains(s3) System.out.println(
36、字符串字符串+s1+中包含字符串中包含字符串+s3); else System.out.println(字符串字符串+s1+中不包含字符串中不包含字符串+s3);import java.util.regex.*;class Examplepublic static void main(String args) String s1=0A1A2A3A4A5A6A7A8A9A; String s2=5A6; String s3=5AA6; f(s1,s2); f(s1,s3);public static void f(String s1,String s2)if(s1.contains(s2) Sy
37、stem.out.println(字符串字符串+s1+中包含字符串中包含字符串+s2); else System.out.println(字符串字符串+s1+中不包含字符串中不包含字符串+s2);6.4 正則表達(dá)式與模式匹配正則表達(dá)式與模式匹配 1 1正則表達(dá)式(模式)正則表達(dá)式(模式) 一個(gè)正則表達(dá)式是含有一些具有特殊意義字符的字符串,一個(gè)正則表達(dá)式是含有一些具有特殊意義字符的字符串,這些特殊字符稱作正則表達(dá)式中的元字符。這些特殊字符稱作正則表達(dá)式中的元字符。比如,“dok”中的d就是有特殊意義的元字符,代表0到9中的任何一個(gè)。一個(gè)一個(gè)正則表達(dá)式正則表達(dá)式也稱作一個(gè)也稱作一個(gè)模式模式,字符串
38、“9ok”和“1ok”都是和模式:“dok”匹配的字符串之一。和一個(gè)模式匹配的字符串稱作匹配模式字符串匹配模式字符串,也稱作模式匹配字符串模式匹配字符串。 2 2模式匹配模式匹配 模式匹配就是檢索和指定模式匹配的字符串。模式匹配就是檢索和指定模式匹配的字符串。Java提供了專門用來進(jìn)行模式匹配的類,這些類在java.util.regexjava.util.regex包中。(1 1)建立模式對(duì)象建立模式對(duì)象 進(jìn)行模式匹配的第一步就是使用進(jìn)行模式匹配的第一步就是使用PatternPattern類創(chuàng)建一個(gè)對(duì)類創(chuàng)建一個(gè)對(duì)象,稱作模式對(duì)象象,稱作模式對(duì)象。PatternPattern類調(diào)用類方法類調(diào)用類
39、方法compilecompile(String patterString patter)來完成這一任務(wù))來完成這一任務(wù),其中的參數(shù)patter是一個(gè)正則表達(dá)式,稱作模式對(duì)象使用的模式 例如,我們使用正則表達(dá)式“Ad”Ad”建立一個(gè)模式對(duì)象p: Pattern p= Ppile(Pattern p= Ppile(AdAd);); 如果參數(shù)如果參數(shù)patterpatter指定的正則表達(dá)式有錯(cuò),指定的正則表達(dá)式有錯(cuò),compliecomplie方法將方法將拋出異常:拋出異常:PatternSyntaxExceptionPatternSyntaxException。模式匹配分兩步實(shí)現(xiàn):模式匹配分兩步實(shí)
40、現(xiàn):PatternPattern類也可以調(diào)用類方法類也可以調(diào)用類方法compile(String regex, int compile(String regex, int flags)flags)返回一個(gè)返回一個(gè)PatternPattern對(duì)象,參數(shù)對(duì)象,參數(shù)flagsflags可以取下列有效值:可以取下列有效值:Pattern .CASE_INSENSITIVE-Pattern .CASE_INSENSITIVE-模式匹配時(shí)將忽略大小寫模式匹配時(shí)將忽略大小寫。Pattern.MULTILINE-Pattern.MULTILINE-在這種模式下,在這種模式下,和和$分別匹配一分別匹配一行的行的
41、開始和結(jié)束開始和結(jié)束。Pattern.DOTALL-Pattern.DOTALL-在這種模式下,表達(dá)式在這種模式下,表達(dá)式.可以匹配任意可以匹配任意字符,包括表示一行的結(jié)束符。字符,包括表示一行的結(jié)束符。Pattern.UNICODE_CASE-Pattern.UNICODE_CASE-在這個(gè)模式下,如果你還啟用了在這個(gè)模式下,如果你還啟用了CASE_INSENSITIVE標(biāo)志,那么它會(huì)對(duì)標(biāo)志,那么它會(huì)對(duì)Unicode字符進(jìn)行大字符進(jìn)行大小寫不敏感的匹配。默認(rèn)情況下,大小寫不敏感的匹配只適用小寫不敏感的匹配。默認(rèn)情況下,大小寫不敏感的匹配只適用于于US-ASCII字符集。字符集。Pattern
42、.CANON_EQ -Pattern.CANON_EQ -當(dāng)且僅當(dāng)當(dāng)且僅當(dāng)兩個(gè)字符的兩個(gè)字符的正規(guī)分解正規(guī)分解(canonical decomposition)都完全相同的情況下,才認(rèn)定匹都完全相同的情況下,才認(rèn)定匹配。配。 (2 2)建立匹配對(duì)象建立匹配對(duì)象模式對(duì)象模式對(duì)象p p調(diào)用調(diào)用matchermatcher( (CharSequence inputCharSequence input) )方法返回一方法返回一個(gè)個(gè)MatcherMatcher對(duì)象對(duì)象m m,稱作,稱作匹配對(duì)象匹配對(duì)象,參數(shù),參數(shù)inputinput可以是任何一個(gè)可以是任何一個(gè)實(shí)現(xiàn)了實(shí)現(xiàn)了CharSequenceChar
43、Sequence接口的類創(chuàng)建的對(duì)象,我們前面學(xué)習(xí)的接口的類創(chuàng)建的對(duì)象,我們前面學(xué)習(xí)的StringString類和類和StringBufferStringBuffer類都使用了類都使用了CharSequenceCharSequence接口。接口。例:例: Matcher m= p.matcher(s);一個(gè)一個(gè)MatcherMatcher對(duì)象對(duì)象m m可以使用下列可以使用下列3 3個(gè)方法尋找參數(shù)個(gè)方法尋找參數(shù)inputinput指指定的字符序列中是否有和模式定的字符序列中是否有和模式patterpatter匹配的子序列(匹配的子序列(patterpatter是是創(chuàng)建模式對(duì)象創(chuàng)建模式對(duì)象p p時(shí)使
44、用的正則表達(dá)式)。時(shí)使用的正則表達(dá)式)。npublic boolean find() public boolean find() :尋找尋找inputinput和和patterpatter匹配的下一子序匹配的下一子序列列,如果成功該方法返回true,否則返回false。m m首次調(diào)用該方首次調(diào)用該方法時(shí),尋找法時(shí),尋找inputinput中第中第1 1個(gè)和個(gè)和patterpatter匹配的子序列匹配的子序列,如果 find()返回true,m m再調(diào)用再調(diào)用find()find()方法將從上一次匹配模式成功的子序方法將從上一次匹配模式成功的子序列后開始尋找下一個(gè)匹配模式的子字符串列后開始尋找下
45、一個(gè)匹配模式的子字符串。若find方法返回true,m調(diào)用start()方法和end方法可以得到該匹配模式子序列在input中的開始位置和結(jié)束位置。若find方法返回true,m調(diào)用group()返回一個(gè)匹配模式的字符串對(duì)象。MatcherMatcher對(duì)象常用方法:對(duì)象常用方法:npublic boolean matches()public boolean matches():判斷判斷inputinput是否完全和是否完全和patterpatter匹配。匹配。npublic boolean lookingAt()public boolean lookingAt():判斷從判斷從inputin
46、put的開始位的開始位置是否有和置是否有和patterpatter匹配的子序列。匹配的子序列。若lookingAt()方法返回true,m調(diào)用start()方法和end()方法可以得到lookingAt()方法找到的匹配模式子序列在input中的開始位置和結(jié)束位置。若lookingAt()方法返回true,m調(diào)用group()可以返回一個(gè)匹配模式的字符串對(duì)象。 下列幾個(gè)方法也是下列幾個(gè)方法也是MatcherMatcher對(duì)象對(duì)象m m常用的方法常用的方法npublic boolean find(int start) public boolean find(int start) 判斷判斷inpu
47、tinput從參數(shù)從參數(shù)startstart指定位置開始是否有和指定位置開始是否有和patterpatter匹配的子序列,參數(shù)匹配的子序列,參數(shù)startstart取值取值0 0時(shí),該方法和時(shí),該方法和lookingAt()lookingAt()的功能相同。的功能相同。npublic String replaceAll(String replacement) public String replaceAll(String replacement) MatcherMatcher對(duì)象對(duì)象m m調(diào)用該方法可以返回一個(gè)字符串對(duì)象,該字調(diào)用該方法可以返回一個(gè)字符串對(duì)象,該字符串是通過把符串是通過把inp
48、utinput中與模式中與模式patterpatter匹配的子字符串全部替匹配的子字符串全部替換為參數(shù)換為參數(shù)replacementreplacement指定的字符串得到的(注意,指定的字符串得到的(注意,inputinput本身沒有發(fā)生變化)。本身沒有發(fā)生變化)。npublic String replaceFirst(String replacement) public String replaceFirst(String replacement) MatcherMatcher對(duì)象對(duì)象m m調(diào)用該方法可以返回一個(gè)字符串對(duì)象,該字調(diào)用該方法可以返回一個(gè)字符串對(duì)象,該字符串是通過把符串是通過把i
49、nputinput中第中第1 1個(gè)與模式個(gè)與模式patterpatter匹配的子字符串匹配的子字符串替換為參數(shù)替換為參數(shù)replacementreplacement指定的字符串得到的(注意,指定的字符串得到的(注意,inputinput本身沒有發(fā)生變化)本身沒有發(fā)生變化)。import java.util.regex.*;class Examplepublic static void main(String args) Pattern p; Matcher m; String s1=0A1A2A3A4A5A6A7A8A9A; p=Ppile(dAd); m=p.matcher(s1); whi
50、le(m.find() String str=m.group();System.out.print(從從+m.start()+到到+m.end()+匹配模式子序列:匹配模式子序列:);System.out.println(str); String temp=m.replaceAll(*); System.out.println(temp); System.out.println(s1); m=p.matcher(9A00A3); if(m.matches() String str=m.group();System.out.println(str); elseSystem.out.println
51、(不完全匹配不完全匹配); if(m.lookingAt() String str=m.group();System.out.println(str);6.5 元字符模式元字符模式 在正則表達(dá)式(模式)中可以使用一對(duì)方括號(hào)括起若干個(gè)字符,代 表方括號(hào)中的任何一個(gè)字符。例如pattern=“159ABC”,那么“1ABC” 、“5ABC”和“9ABC”都是和模式pattern匹配的字符序列。 方括號(hào)模式的一些意義如下: abc abc:代表:代表a a、b b、c c中的任何一個(gè)。中的任何一個(gè)。 abc abc:代表除了:代表除了a a、b b、c c以外的任何字符以外的任何字符 a-d a-d
52、:代表:代表 a a至至d d中的任何一個(gè)。中的任何一個(gè)。 另外,中括號(hào)里允許嵌套中括號(hào),可以進(jìn)行并、交、差運(yùn)算,例如: a-dm-p a-dm-p:代表:代表 a a至至d d, 或或 m m 至至 p p中的任何字符(并)。中的任何字符(并)。 a-z&def a-z&def :代表:代表d d、 e e、或、或 f f中的任何一個(gè)(交)。中的任何一個(gè)(交)。 a-f&bc a-f&bc: :代表:代表a a、d d、e e、f f (差)(差)表6.1代表單個(gè)字符的元字符 元字符元字符 在正則表達(dá)式中的寫法在正則表達(dá)式中的寫法 意義意義 . “.” 代表任何一個(gè)字符 d “d” 代表0至
53、9的任何一個(gè)數(shù)字 D “D” 代表任何一個(gè)非數(shù)字字符 s “s” 代表空格類字符, t、n、 x0B、 f、 r S “S” 代表非空格類字符 w “w” 代表可用于標(biāo)識(shí)符的字符W “W” 代表不能用于標(biāo)識(shí)符的字符 表 6.2 限定符帶限定符號(hào)的模式 意義 X? X出現(xiàn)0次或1次 X* X出現(xiàn)0次或多次 X+ X出現(xiàn)1次或多次 Xn X恰好出現(xiàn)n次 Xn, X至少出現(xiàn)n次 Xn,m X出現(xiàn)n次至m次 6.6 Scanner類類Scanner類不僅可以創(chuàng)建出用于讀取用戶從鍵盤輸入的類不僅可以創(chuàng)建出用于讀取用戶從鍵盤輸入的數(shù)據(jù)的對(duì)象,而且可以創(chuàng)建出用于解析字符串的對(duì)象。數(shù)據(jù)的對(duì)象,而且可以創(chuàng)建出用
54、于解析字符串的對(duì)象。1、創(chuàng)建用于讀取用戶從鍵盤輸入數(shù)據(jù)的對(duì)象創(chuàng)建用于讀取用戶從鍵盤輸入數(shù)據(jù)的對(duì)象 Scanner input=new Scanner(System.in);其中:常用方法:其中:常用方法:nextInt();nextDouble();nextLine();import java.util.*;class Example public static void main(String args) Scanner input=new Scanner(System.in);String s;int x;double y;s=input.nextLine();x=input.nextIn
55、t();y=input.nextDouble();System.out.println(x=+x);System.out.println(y=+y);System.out.println(s=+s); 6.6 Scanner類類2、創(chuàng)建出用于解析字符串的對(duì)象創(chuàng)建出用于解析字符串的對(duì)象 Scanner input=new Scanner(str);1)使用默認(rèn)分割標(biāo)記(空白)解析字符串)使用默認(rèn)分割標(biāo)記(空白)解析字符串其中:常用方法:其中:常用方法:next ()-依次返回依次返回str中的單詞中的單詞hasNext ()-返回返回str中的單詞是否已經(jīng)被中的單詞是否已經(jīng)被next()方法()
56、方法解析完畢解析完畢nextInt()、 nextDouble()等方法將等方法將str中的字符串轉(zhuǎn)換為中的字符串轉(zhuǎn)換為相應(yīng)數(shù)據(jù)類型的數(shù)據(jù)相應(yīng)數(shù)據(jù)類型的數(shù)據(jù)import java.util.*;class Example public static void main(String args) Scanner input=new Scanner(System.in);String s;s=input.nextLine();Scanner scanner=new Scanner(s);while(scanner.hasNext() System.out.println(scanner.next(
57、); import java.util.*;class Examplepublic static void main(String args) Scanner input=new Scanner(System.in); String s; s=input.nextLine(); Scanner scanner=new Scanner(s); System.out.println(scanner.nextDouble()*10);6.6 Scanner類類2、創(chuàng)建出用于解析字符串的對(duì)象創(chuàng)建出用于解析字符串的對(duì)象 Scanner input=new Scanner(str); 2)使用正則表達(dá)式作
58、為分隔標(biāo)記解析字符串)使用正則表達(dá)式作為分隔標(biāo)記解析字符串其中:常用方法:其中:常用方法:useDelimiter (正則表達(dá)式正則表達(dá)式)-將一個(gè)正則表達(dá)式作為分將一個(gè)正則表達(dá)式作為分隔標(biāo)記,即和正則表達(dá)式匹配的字符串都是分隔標(biāo)記。隔標(biāo)記,即和正則表達(dá)式匹配的字符串都是分隔標(biāo)記。import java.util.*;class Example public static void main(String args) String s=市話費(fèi):市話費(fèi):176.89元,長途費(fèi):元,長途費(fèi):187.98,網(wǎng)絡(luò)費(fèi):,網(wǎng)絡(luò)費(fèi):928.66元元; Scanner scanner=new Scanner(
59、s); scanner.useDelimiter(0123456789.+); double sum=0; while(scanner.hasNext() try double p=scanner.nextDouble(); sum+=p; System.out.println(p); catch(InputMismatchException exp) String t=scanner.next(); System.out.println(總通信費(fèi)用:總通信費(fèi)用:+sum+元元); 作業(yè)作業(yè)P122 1、2 下課了。休息一會(huì)兒。休息一會(huì)兒。6.2 StringBuffer 類類 前面我們學(xué)習(xí)了
60、String字符串對(duì)象,String類創(chuàng)建的字符串對(duì)象是不可修改的,也就是說,String字符串不能修改、刪除或替換字符串中的某個(gè)字符,即String對(duì)象一旦創(chuàng)建,那么實(shí)體是不可以再發(fā)生變化的 在這一節(jié),我們介紹StringBuffer類,該類能創(chuàng)建可修改的字符串序列,也就是說,該類的對(duì)象的實(shí)體的內(nèi)存空間可以自動(dòng)的改變大小,便于存放一個(gè)可變的字符串。 1StringBuffer類的構(gòu)造方法 StringBuffer類有三個(gè)構(gòu)造方法: (1)StringBuffer() (2)StringBuffer(int size) (3)StringBuffer(String s) 使用第1個(gè)無參數(shù)的構(gòu)造
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45097.2-2024智能消費(fèi)品安全第2部分:風(fēng)險(xiǎn)評(píng)估
- 2024年苗木種植與環(huán)保技術(shù)合作合同3篇
- 2024年遠(yuǎn)程監(jiān)控設(shè)施安裝協(xié)議3篇
- 倉庫叉車租賃合同
- 水產(chǎn)品安全質(zhì)量協(xié)議書
- 國際體育俱樂部租賃合約
- 城市輕軌監(jiān)理招標(biāo)文件樣本
- 廣東省加油站非油品業(yè)務(wù)拓展
- 工業(yè)園區(qū)臨電施工合同
- 醫(yī)療行業(yè)專家顧問聘用合同模板
- 期末(試題)-2024-2025學(xué)年人教PEP版英語六年級(jí)上冊(cè)
- 三創(chuàng)賽獲獎(jiǎng)-非遺文化創(chuàng)新創(chuàng)業(yè)計(jì)劃書
- 冷庫項(xiàng)目專項(xiàng)扶持資金申請(qǐng)報(bào)告(模板范本)
- 鉑銠合金漏板.
- (完整版)建筑力學(xué)(習(xí)題答案)
- 少年宮籃球活動(dòng)教案
- 國有建設(shè)企業(yè)《大宗材料及設(shè)備采購招標(biāo)管理辦法》
- 民間秘術(shù)絕招大全
- N摻雜TiO2納米管的合成及光催化性能研究
- 二沉池設(shè)計(jì)說明書
- (完整版)展廳展館博物館美術(shù)館設(shè)計(jì)標(biāo)招標(biāo)評(píng)分細(xì)則及打分表
評(píng)論
0/150
提交評(píng)論