




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四講數(shù)組及字符處理1、數(shù)組(Array)2、字符處理(String)第四講數(shù)組及字符處理1、數(shù)組(Array)11、數(shù)組 ——一維數(shù)組:定義一維數(shù)組的定義方式為:typearrayName[];其中類型(type)可以為Java中任意的數(shù)據(jù)類型,包括簡(jiǎn)單類型和組合類型,數(shù)組名arrayName為一個(gè)合法的標(biāo)識(shí)符,[]指明該變量是一個(gè)數(shù)組類型變量。例如:intintArray[];聲明了一個(gè)整型數(shù)組,數(shù)組中的每個(gè)元素為整型數(shù)據(jù)。1、數(shù)組2我們還可以定義一個(gè)復(fù)合類型的數(shù)組,例如:DatedateArray[];聲明了一個(gè)容納復(fù)合數(shù)據(jù)類型Date的數(shù)組。與C、C++不同,Java在數(shù)組的定義中并不為數(shù)組元素分配內(nèi)存,因此[]中不用指出數(shù)組中元素的個(gè)數(shù),即數(shù)組長(zhǎng)度,而且對(duì)于如上定義的一個(gè)數(shù)組是不能訪問(wèn)它的任何元素的。必須經(jīng)過(guò)初始化后,才能應(yīng)用數(shù)組的元素。1、數(shù)組 ——一維數(shù)組:定義我們還可以定義一個(gè)復(fù)合類型的數(shù)組,例如:1、數(shù)組3除了這種定義數(shù)組的方式之外,java語(yǔ)言還提供了其他的定義形式,如下所示:type[]arrayName;對(duì)于以上舉出的例子,我們也可以這樣定義:int[]intArray;Date[]dateArray;1、數(shù)組 ——一維數(shù)組:定義除了這種定義數(shù)組的方式之外,java語(yǔ)言還提供了其4一維數(shù)組定義之后,必須經(jīng)過(guò)初始化才可以引用。數(shù)組的初始化分為靜態(tài)初始化和動(dòng)態(tài)初始化兩種:
靜態(tài)初始化:在定義數(shù)組的同時(shí)對(duì)數(shù)組元素進(jìn)行初始化,例如:intintArray[]={1,2,3,4};//定義了一個(gè)含有4個(gè)//元素的int型數(shù)組。1、數(shù)組 ——一維數(shù)組:初始化一維數(shù)組定義之后,必須經(jīng)過(guò)初始化才可以引用。數(shù)組的初始化分為5
動(dòng)態(tài)初始化:使用運(yùn)算符new為數(shù)組分配空間,對(duì)于簡(jiǎn)單類型的數(shù)組,其格式如下:typearrayName[]=newtype[arraySize];type[]arrayName=newtype[arraySize];對(duì)于復(fù)合類型的數(shù)組,需要經(jīng)過(guò)兩步空間分配。首先:typearrayName[]=newtype[arraySize];然后:arrayName[0]=newtype(paramList);…arrayName[arraySize-1]=newtype(paramList);1、數(shù)組 ——一維數(shù)組:初始化動(dòng)態(tài)初始化:使用運(yùn)算符new為數(shù)組分配空間,對(duì)于簡(jiǎn)1、6例如:StringstringArrar[];//定義一個(gè)String類型的數(shù)組stringArray=newString[3];//給數(shù)組stringArray分配3個(gè)應(yīng)用//空間,初始化每個(gè)引用值為nullstringArray[0]=newString(“how”);stringArray[1]=newString(“are”);stringArray[2]=newString(“you”);初始化各數(shù)組元素1、數(shù)組 ——一維數(shù)組:初始化例如:初始化各數(shù)組元素1、數(shù)組7當(dāng)定義了一個(gè)數(shù)組,并用運(yùn)算符new為它分配了內(nèi)存空間后,就可以引用數(shù)組中的每一個(gè)元素了。元素的引用方式為:arrayName[index]index為數(shù)組下標(biāo),可以是整型常數(shù)或表達(dá)式,如:arrayName[1],arrayName[i],arrayName[6*i]等。下標(biāo)是0序的,即從0開始,一直到數(shù)組長(zhǎng)度減1。1、數(shù)組 ——一維數(shù)組:引用當(dāng)定義了一個(gè)數(shù)組,并用運(yùn)算符new為它分配了內(nèi)存空間后,就可8
另外,與C、C++中不同,Java對(duì)數(shù)組元素要進(jìn)行越界檢查以保證安全性。同時(shí),對(duì)于每個(gè)數(shù)組都有一個(gè)屬性length指明它的長(zhǎng)度,例如:intArray.length指明數(shù)組intArray的長(zhǎng)度。1、數(shù)組 ——一維數(shù)組:邊界檢查另外,與C、C++中不同,Java對(duì)數(shù)組元素要進(jìn)行越9
publicclassArrayTest{publicstaticvoidmain(Stringargs[]){inti;inta[]=newint[5];for(i=0;i<5;i++){a[i]=i;}for(i=a.length-1;i>=0;i--){System.out.println("a["+i+"]="+a[i]);}}}
該程序?qū)?shù)組中的每個(gè)元素賦值,然后按逆序輸出。1、數(shù)組 ——一維數(shù)組:示例publicclassArrayTest該程序?qū)?shù)組中10運(yùn)行結(jié)果為:C:\>javaArrayTesta[4]=4a[3]=3a[2]=2a[1]=1a[0]=01、數(shù)組 ——一維數(shù)組:示例運(yùn)行結(jié)果為:1、數(shù)組11在任何語(yǔ)言中,多維數(shù)組都被看作數(shù)組的數(shù)組。比如二維數(shù)組是一個(gè)特殊的一維數(shù)組,其每一個(gè)元素又是一個(gè)一維數(shù)組。我們主要以二維數(shù)組為例來(lái)說(shuō)明,高維數(shù)組與此類似。1、數(shù)組 ——多維數(shù)組1、數(shù)組12二維數(shù)組的定義方式
typearrayName[][];
例如:intintArray[][];
也可以采用另一種定義方式:type[][]arrayName;與一維數(shù)組一樣,這時(shí)對(duì)數(shù)組元素也沒(méi)有分配內(nèi)存空間,同樣要使用運(yùn)算符new來(lái)分配內(nèi)存,然后才可以訪問(wèn)每個(gè)元素。1、數(shù)組 ——二維數(shù)組:定義二維數(shù)組的定義方式1、數(shù)組13二維數(shù)組的初始化也分為靜態(tài)和動(dòng)態(tài)兩種。
靜態(tài)初始化:在定義數(shù)組的同時(shí)為數(shù)組分配空間。intintArray[][]={{1,2},{2,3},{3,4}};不必指出數(shù)組每一維的大小,系統(tǒng)會(huì)根據(jù)初始化時(shí)給出的初始值的個(gè)數(shù)自動(dòng)算出數(shù)組每一維的大小。1、數(shù)組 ——二維數(shù)組:初始化二維數(shù)組的初始化也分為靜態(tài)和動(dòng)態(tài)兩種。1、數(shù)組14動(dòng)態(tài)初始化:對(duì)高維數(shù)組來(lái)說(shuō),分配內(nèi)存空間有下面兩種方法:1.直接為每一維分配空間,如:typearrayName[][]=newtype[arraylength1][arraylength2]例如:inta[][]=newint[2][3];1、數(shù)組 ——二維數(shù)組:初始化動(dòng)態(tài)初始化:對(duì)高維數(shù)組來(lái)說(shuō),分配內(nèi)存空間有下面兩種方法:1、152.從最高維開始(而且必須從最高維開始),分別為每一維分配空間,如:
Strings[][]=newString[2][];s[0]=newString[2];s[1]=newString[3];s[0][0]=newString(“Good”);s[0][1]=newString(“Luck”);s[1][0]=newString(“to”);s[1][1]=newString(“you”);s[1][2]=newString(“!”);1、數(shù)組 ——二維數(shù)組:初始化2.從最高維開始(而且必須從最高維開始),分別為每一維分配空16二維數(shù)組的引用對(duì)二維數(shù)組中每個(gè)元素,引用方式為:arrayName[index1][index2]其中index1和index2為數(shù)組下標(biāo),為整型常數(shù)和表達(dá)式,都是0序的。二維數(shù)組舉例兩個(gè)矩陣相乘,參照參考書在課余時(shí)間上機(jī)練習(xí)。1、數(shù)組 ——二維數(shù)組:引用及示例二維數(shù)組的引用1、數(shù)組17數(shù)組是用來(lái)表達(dá)一組同類型數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)在Java中數(shù)組是定長(zhǎng)的,數(shù)組的大小不會(huì)動(dòng)態(tài)變化數(shù)組變量的值是數(shù)組對(duì)象實(shí)例的引用在java.util包中的Arrays類提供了一些操作數(shù)組的方法在java.util包中的Vector提供了動(dòng)態(tài)變長(zhǎng)數(shù)組的功能,Vector的容量可以隨著需要變化1、數(shù)組 ——java.util.Arrays數(shù)組是用來(lái)表達(dá)一組同類型數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)1、數(shù)組18intbinarySearch(typea[],typekey)數(shù)組a必須已經(jīng)排序,否則返回值無(wú)意義當(dāng)數(shù)組a中有重復(fù)的值時(shí),該方法返回的值不確定如果key存在,則返回它在數(shù)組a中的位置如果不存在,則返回它的“-(插入位置-1)”voidfill(typea[],typeval) voidfill(typea[],intfromIndx,inttoIndex,typeval)包括a[fromIndx],但不包括a[toIndex]fromIndx==toIndex時(shí),范圍是一個(gè)空的范圍1、數(shù)組 ——java.util.ArraysintbinarySearch(typea[],typ19booleanequals(typea[],typea2[])兩個(gè)數(shù)組大小相同,并且每一個(gè)元素相等兩個(gè)null數(shù)組是相等的1、數(shù)組 ——java.util.Arraysbooleanequals(typea[],type20voidsort(typea[]) voidsort(typea[],intfromIndx,inttoIndex) voidsort(typea[],Comparator
c) voidsort(typea[],intfromIndx,inttoIndex,Comparator
c)包括a[fromIndx],但不包括a[toIndex]fromIndx==toIndex時(shí),范圍是一個(gè)空的范圍排序算法都具有n*log(n)的計(jì)算復(fù)雜性,效率高排序算法都保證穩(wěn)定,即排序算法不會(huì)改變相等元素的順序?qū)Σ煌愋偷臄?shù)組,算法的實(shí)現(xiàn)并不完全相同可以用自己的Comparator對(duì)象聲明自定義的順序1、數(shù)組 ——java.util.Arraysvoidsort(typea[])1、數(shù)組21java.lang.Systemvoidarraycopy(Object
src,int
src_position, Object
dst,int
dst_position,int
length)范圍不能越界可對(duì)任何同類型的數(shù)組進(jìn)行復(fù)制數(shù)組復(fù)制過(guò)程中做嚴(yán)格的類型檢查更詳細(xì)的內(nèi)容參見JDK文檔1、數(shù)組 ——數(shù)組的復(fù)制java.lang.System1、數(shù)組223、字符串字符串是字符的序列,它是組織字符的基本數(shù)據(jù)結(jié)構(gòu),從某種程度上來(lái)說(shuō)有些類似于字符的數(shù)組。在Java中,字符串被當(dāng)作對(duì)象來(lái)處理。程序中需要用到的字符串可以分為兩大類,一類是創(chuàng)建之后不會(huì)再做修改和變動(dòng)的字符串常量;另一類是創(chuàng)建之后允許再做更改和變化的字符串變量。對(duì)于字符串常量,由于程序中經(jīng)常需要對(duì)它做比較,搜索之類的操作,所以通常把它放在一個(gè)具有一定名稱的對(duì)象之中,由程序?qū)υ搶?duì)象完成上述操作。在Java中,存放字符串常量的對(duì)象用String類,對(duì)于字符串變量,由于程序中經(jīng)常需要對(duì)它做添加,插入,修改等操作,一般存放在StringBuffer類的對(duì)象中。3、字符串字符串是字符的序列,它是組織字符的基本數(shù)據(jù)233、字符串 ——String字符串常量使用雙引號(hào)括住的一串字符,比如:
"Helloworld!"Java編譯器自動(dòng)為每一個(gè)字符串常量生成一個(gè)String類的實(shí)例,因此可以用字符串常量直接初始化一個(gè)String對(duì)象,如:
Strings="Helloworld!";3、字符串24要?jiǎng)?chuàng)建類String的一個(gè)對(duì)象并進(jìn)行初始化,需要調(diào)用類String的構(gòu)造方法。類String中提供了下面的一些構(gòu)造方法:String():無(wú)參數(shù)的缺省的構(gòu)造方法用來(lái)創(chuàng)建一個(gè)空串。
Strings=newString();
String(Stringvalue):利用已經(jīng)存在的字符串常量創(chuàng)建一個(gè)新的String對(duì)象,該對(duì)象的內(nèi)容與給出的字符串常量一致。Strings=newString(“hello”);String(charvalue[]):通過(guò)給構(gòu)造方法傳遞一個(gè)字符數(shù)組可以創(chuàng)建一個(gè)非空串。 charchars[]={‘a(chǎn)’,‘b’,‘c’};
Strings=newString(chars);
3、字符串 ——String:創(chuàng)建要?jiǎng)?chuàng)建類String的一個(gè)對(duì)象并進(jìn)行初始化,需要調(diào)用類3、字25String(char[],intstartIndex,intnumChars):這種方法用來(lái)創(chuàng)建一個(gè)非空串,并且指明所創(chuàng)建的字符串在字符數(shù)組中的起始地址以及所包含的字符個(gè)數(shù)。charchars[]={'a','b','c','d','e','f'};Strings=newString(chars,2,3);該方法生成的串s為“cde”。(注意數(shù)組的下標(biāo)從0開始)3、字符串 ——String:創(chuàng)建String(char[],intstartIn26String(bytemybyte[],bytehibyte):因?yàn)樵贗nternet上,格式采用八位的ASCII碼,所以Java的類String提供了從byte型數(shù)組進(jìn)行初始化的構(gòu)造方法。其中hibyte指明各字符的高位字節(jié),對(duì)于通常所用的ASCII碼,必須將高位字節(jié)聲明為零,而其他的非拉丁文字符則置為非零。
bytemybyte[]={97,98,99}; Strings=newString(mybyte,0);該方法構(gòu)造的字符串s是“abc”。3、字符串 ——String:創(chuàng)建String(bytemybyte[],bytehi27String(bytemybyte[],bytehibyte,intstartIndex,intnumChars):這種構(gòu)造方法與String(char[],intstartIndex,intnumChars)類似,只是初始化的數(shù)組類型不同。
bytemybyte[]={80,81,82,83,84,85}; Strings=newString(mybyte,0,2,3);該方法構(gòu)造的字符串s是“RST”。String(StringBufferbuffer):這個(gè)構(gòu)造函數(shù)利用一個(gè)已經(jīng)存在的StringBuffer對(duì)象為新建的String對(duì)象初始化。3、字符串 ——String:創(chuàng)建String(bytemybyte[],bytehi28
1.lengthpublicintlength()此方法返回字符串的字符個(gè)數(shù),如:
Strings="abc"; System.out.println(s.length());則將顯示字符個(gè)數(shù)為3。3、字符串 ——String:基本方法3、字符串292.charAtpubliccharcharAt(intindex) 該方法返回字符串中index位置上的字符,其中index值的范圍是0~length-1。3.getChars 如果要從字符串中提取一個(gè)以上的字符,則可以用此方法:publicvoidgetchars(intsrcbegin,intend,charbuf[],intdstbegin) 其中,srcbegin為要提取的第一個(gè)字符在源串中的位置, end為要提取的最后一個(gè)字符在源串中的位置,字符數(shù)組buf[]存放目的字符串,dstbegin為提取的字符串在目的串中的起始位置。3、字符串 ——String:基本方法2.charAt3、字符串304.getbytespublicvoidgetbytes(intsrcbegin,intend,bytebyt[],intdstbegin)類似于上一個(gè)方法,只是串中的字符均用8位表示,參數(shù)及用法同上。5.indexOf和lastIndexOf 為了在給定的字符串中檢索特定的字符或子串,類String提供了上面兩種方法,并通過(guò)方法重寫更方便的處理這類問(wèn)題。這兩種方法中,如果查找成功,則返回匹配成功的字符的位置,如果沒(méi)有查找到,則都返回-1。intindexOf(intch)intlastIndexOf(intch)返回字符ch在字符串中出現(xiàn)的第一個(gè)和最后一個(gè)位置。3、字符串 ——String:基本方法4.getbytes3、字符串31 intindexOf(Stringstr) intlastindexOf(Stringstr) 返回子串str中第一個(gè)字符在字符串中出現(xiàn)的始末位置。 intindexOf(intch,intfromIndex)) intlastIndexOf(intch,intfromIndex)) 返回字符ch在字符串中位置fromIndex以后出現(xiàn)的始末位置。intindexOf(Stringstr,intfromIndex) intlastIndexOf(Stringstr,intfromIndex) 返回子串str中的第一個(gè)字符在字符串中位置fromIndex 以后出現(xiàn)的始末位置。3、字符串 ——String:基本方法 intindexOf(Stringstr)3、字符串326.+ 在Java中,運(yùn)算符“+”可以用來(lái)實(shí)現(xiàn)字符串的連接,如: Strings=“Heis”+
age
+“yearsold.” 假設(shè)整數(shù)型變量age的值為15,那么,s的值為 “Heis15yearsOld”。7.compareTo publicintcompareTo(Stringstr) 該方法按字典次序比較兩個(gè)字符串的大小,如果源串較小,則返回一個(gè)小于0的值,如相等則返回0,否則返回一個(gè)大于0的值。3、字符串 ——String:基本方法6.+3、字符串338.regionMatches booleanregionMatches
(inttoffset,Stringother,intooffset,intlen)
booleanregionMatches
(booleanignoreCase,inttoffset,Stringother, intooffset,intlen)上述兩個(gè)方法都是用來(lái)進(jìn)行模式匹配的,匹配成功則返回true,否則返回false。其中,toffset和ooffset分別指明當(dāng)前字符串和參數(shù)字符串中所要比較的子串的起始索引位置,len指明比較的長(zhǎng)度,而ignoreCase指明比較時(shí)是否區(qū)分大小寫。對(duì)于第一種方法,比較是區(qū)分大小寫的。Ex:regionMatches(2,abcdef,2,3),此時(shí)“cde”為模式,與indexOf相似。3、字符串 ——String:基本方法8.regionMatches3、字符串349.equals和equalsIgnoreCase publicbooleanequals(objectstr) publicbooleanequalsIgnoreCase(objectstr) 判斷兩個(gè)字符串是否相等,則可以用此方法。相等則返回true,不等則返回false,兩種方法的區(qū)別在于equalsIgnoreCase不區(qū)分字母大小寫,而equals則須區(qū)分。10.其他方法 publicStringconcat(Stringstr); 將當(dāng)前字符串對(duì)象與給定的字符串str連接起來(lái)。3、字符串 ——String:基本方法9.equals和equalsIgnoreCase3、字35publicStringreplace(charoldChar,charnewChar)將串中出現(xiàn)的特定字符用新的字符代替。publicStringsubstring(intbeginIndex)publicStringsubstring(intbeginIndex,intendIndex)用來(lái)得到字符串中指定范圍內(nèi)的子串。publicStringtoLowerCase()把串中的所有字符轉(zhuǎn)換成小寫publicStringtoUpperCase()把串中的所有字符轉(zhuǎn)換成大寫3、字符串 ——String:基本方法publicStringreplace(charold36classStringCopyModify{publicstaticvoidmain(Stringargs[]){Strings=newString("WewillgofurthertomodifyaStringbycopy!");System.out.println("FromString\""+s+"\"");Stringsub1=s.substring(20);Stringsub2=s.substring(0,19);System.out.println(“Getasubstringfromindex20totheend:"+sub1);System.out.println(“Getasubstringfromindex0to19:"+sub2);Stringcons=sub2.concat(sub1);System.out.println(“Concattwosubstringintoone:\n"+cons);}}3、字符串 ——String:示例classStringCopyModify3、字符串37運(yùn)行結(jié)果為:
FromString“WewillgofurthertomodifyaStringbycopy”Getasubstringfromindex20totheend:tomodifyaStringbycopyGetasubstringfromindex0to19:WewillgofurtherConcattwosubstringsintoone:WewillgofurthertomodifyaStringbycopy可見,通過(guò)拷貝得到新的字符串是并不改變?cè)址闹怠?、字符串 ——String:示例運(yùn)行結(jié)果為:FromString“Wewillgo38StringBuffer()建立一個(gè)空串的緩沖區(qū),長(zhǎng)度為16。StringBuffer(intlength)建立一個(gè)長(zhǎng)度為length的空串緩沖區(qū)。StringBuffer(Stringstr)初始化緩沖區(qū)內(nèi)容為給定的字符串str,并提供另16個(gè)字符的空間供再次分配。
類似于Vector3、字符串 ——StringBuffer:創(chuàng)建3、字符串39除了方法length(),charAt(),getChars()以外,還有以下幾種方法。1.capacitypublicintcapacity()此方法返回字符串緩沖區(qū)的長(zhǎng)度,即總的可供分配的字符個(gè)數(shù)。3、字符串 ——StringBuffer:基本方法除了方法length(),charAt(),getChars40classdemoOfStringBuffer{
publicvoidmain(Stringbuf[]){
StringBuffersb=newStringBuffer("abc");System.out.println("buffer="+sb);System.out.println("length="+sb.length())
System.out.println("capacity="+sb.capacity());}}從運(yùn)行結(jié)果我們可以看到為附加處理保留了空間。注意:capacity()與length()的區(qū)別。C:\>javademoOfStringBufferbuffer=abclength=3capacity=19classdemoOfStringBuffer從運(yùn)行結(jié)果我412.appendpublicsynchronizedStringBufferappend
(對(duì)象類型對(duì)象名)append方法將指定的參數(shù)對(duì)象轉(zhuǎn)化成字符串,附加在原來(lái)的字符串對(duì)象之后。3.insertpublicsynchronizedStringBufferinsert
(int插入位置,對(duì)象類型對(duì)象名)在指定的位置插入給出的參數(shù)對(duì)象所轉(zhuǎn)化而得的字符串。3、字符串 ——StringBuffer:基本方法2.append3、字符串424.setChatAt()publicsynchronizedvoidsetCharAt
(intindex,charch)用來(lái)設(shè)置指定索引index位置的字符值。5.setLengthpublicsynchronizedvoidsetLength
(intnewLength)如果希望明確地定義字符緩沖區(qū)的長(zhǎng)度,則可以用此方法。如果newlength大于現(xiàn)在的長(zhǎng)度,串尾將補(bǔ)0,如果小于,那么newlength后的字符將丟失。3、字符串 ——StringBuffer:基本方法4.setChatAt()3、字符串431.C/C++的字符串只是簡(jiǎn)單的以零字符結(jié)尾的字符數(shù)組,而Java中,字符串是一個(gè)封裝的對(duì)象,這種處理對(duì)于編程者提供了許多有利之處。2.C/C++中可以通過(guò)指針直接對(duì)字符串所在的內(nèi)存地址進(jìn)行操作,并且不對(duì)越界情況進(jìn)行檢查,Java中只能通過(guò)類String或StringBuffer所提供的接口對(duì)字符串進(jìn)行操作,并且要對(duì)越界情況進(jìn)行檢查并報(bào)告,這樣大大增加了安全性。3.由于類String和StringBuffer的接口都經(jīng)明確說(shuō)明,所以我們可以預(yù)知Java中字符串處理的功能;而在C/C++中,只有通過(guò)庫(kù)函數(shù)或者自定義函數(shù)對(duì)字符串進(jìn)行處理。3、字符串
——Java與C/C++處理字符串的差別3、字符串44字符類,支持字符的相關(guān)操作作為基本數(shù)據(jù)類型char的包裝類提供了一些關(guān)于char常量的定義提供了變換大小寫的方法參見JDK文檔3、字符串
——Charactor字符類,支持字符的相關(guān)操作3、字符串45從一個(gè)字符串析取子字符串構(gòu)造方法StringTokenizer(String
str)//缺省分隔符,為空格StringTokenizer(String
str,String
delim)//指定分隔符StringTokenizer(String
str,String
delim,boolean
returnDelims)intcountTokens():返回Token的數(shù)目booleanhasMoreTokens():是否還有下一個(gè)TokenStringnextToken():返回下一個(gè)TokenStringnextToken(String
delim):改變分隔符,從當(dāng)前位置處,繼續(xù)返回下一個(gè)Token。3、字符串
——StringTokenizer從一個(gè)字符串析取子字符串3、字符串46StringTokenizerst=newStringTokenizer("thisisatest");while(st.hasMoreTokens()){println(st.nextToken());}輸出結(jié)果為:thisisatest3、字符串
——StringTokenizerStringTokenizerst=newStrin47演講完畢,謝謝觀看!演講完畢,謝謝觀看!48第四講數(shù)組及字符處理1、數(shù)組(Array)2、字符處理(String)第四講數(shù)組及字符處理1、數(shù)組(Array)491、數(shù)組 ——一維數(shù)組:定義一維數(shù)組的定義方式為:typearrayName[];其中類型(type)可以為Java中任意的數(shù)據(jù)類型,包括簡(jiǎn)單類型和組合類型,數(shù)組名arrayName為一個(gè)合法的標(biāo)識(shí)符,[]指明該變量是一個(gè)數(shù)組類型變量。例如:intintArray[];聲明了一個(gè)整型數(shù)組,數(shù)組中的每個(gè)元素為整型數(shù)據(jù)。1、數(shù)組50我們還可以定義一個(gè)復(fù)合類型的數(shù)組,例如:DatedateArray[];聲明了一個(gè)容納復(fù)合數(shù)據(jù)類型Date的數(shù)組。與C、C++不同,Java在數(shù)組的定義中并不為數(shù)組元素分配內(nèi)存,因此[]中不用指出數(shù)組中元素的個(gè)數(shù),即數(shù)組長(zhǎng)度,而且對(duì)于如上定義的一個(gè)數(shù)組是不能訪問(wèn)它的任何元素的。必須經(jīng)過(guò)初始化后,才能應(yīng)用數(shù)組的元素。1、數(shù)組 ——一維數(shù)組:定義我們還可以定義一個(gè)復(fù)合類型的數(shù)組,例如:1、數(shù)組51除了這種定義數(shù)組的方式之外,java語(yǔ)言還提供了其他的定義形式,如下所示:type[]arrayName;對(duì)于以上舉出的例子,我們也可以這樣定義:int[]intArray;Date[]dateArray;1、數(shù)組 ——一維數(shù)組:定義除了這種定義數(shù)組的方式之外,java語(yǔ)言還提供了其52一維數(shù)組定義之后,必須經(jīng)過(guò)初始化才可以引用。數(shù)組的初始化分為靜態(tài)初始化和動(dòng)態(tài)初始化兩種:
靜態(tài)初始化:在定義數(shù)組的同時(shí)對(duì)數(shù)組元素進(jìn)行初始化,例如:intintArray[]={1,2,3,4};//定義了一個(gè)含有4個(gè)//元素的int型數(shù)組。1、數(shù)組 ——一維數(shù)組:初始化一維數(shù)組定義之后,必須經(jīng)過(guò)初始化才可以引用。數(shù)組的初始化分為53
動(dòng)態(tài)初始化:使用運(yùn)算符new為數(shù)組分配空間,對(duì)于簡(jiǎn)單類型的數(shù)組,其格式如下:typearrayName[]=newtype[arraySize];type[]arrayName=newtype[arraySize];對(duì)于復(fù)合類型的數(shù)組,需要經(jīng)過(guò)兩步空間分配。首先:typearrayName[]=newtype[arraySize];然后:arrayName[0]=newtype(paramList);…arrayName[arraySize-1]=newtype(paramList);1、數(shù)組 ——一維數(shù)組:初始化動(dòng)態(tài)初始化:使用運(yùn)算符new為數(shù)組分配空間,對(duì)于簡(jiǎn)1、54例如:StringstringArrar[];//定義一個(gè)String類型的數(shù)組stringArray=newString[3];//給數(shù)組stringArray分配3個(gè)應(yīng)用//空間,初始化每個(gè)引用值為nullstringArray[0]=newString(“how”);stringArray[1]=newString(“are”);stringArray[2]=newString(“you”);初始化各數(shù)組元素1、數(shù)組 ——一維數(shù)組:初始化例如:初始化各數(shù)組元素1、數(shù)組55當(dāng)定義了一個(gè)數(shù)組,并用運(yùn)算符new為它分配了內(nèi)存空間后,就可以引用數(shù)組中的每一個(gè)元素了。元素的引用方式為:arrayName[index]index為數(shù)組下標(biāo),可以是整型常數(shù)或表達(dá)式,如:arrayName[1],arrayName[i],arrayName[6*i]等。下標(biāo)是0序的,即從0開始,一直到數(shù)組長(zhǎng)度減1。1、數(shù)組 ——一維數(shù)組:引用當(dāng)定義了一個(gè)數(shù)組,并用運(yùn)算符new為它分配了內(nèi)存空間后,就可56
另外,與C、C++中不同,Java對(duì)數(shù)組元素要進(jìn)行越界檢查以保證安全性。同時(shí),對(duì)于每個(gè)數(shù)組都有一個(gè)屬性length指明它的長(zhǎng)度,例如:intArray.length指明數(shù)組intArray的長(zhǎng)度。1、數(shù)組 ——一維數(shù)組:邊界檢查另外,與C、C++中不同,Java對(duì)數(shù)組元素要進(jìn)行越57
publicclassArrayTest{publicstaticvoidmain(Stringargs[]){inti;inta[]=newint[5];for(i=0;i<5;i++){a[i]=i;}for(i=a.length-1;i>=0;i--){System.out.println("a["+i+"]="+a[i]);}}}
該程序?qū)?shù)組中的每個(gè)元素賦值,然后按逆序輸出。1、數(shù)組 ——一維數(shù)組:示例publicclassArrayTest該程序?qū)?shù)組中58運(yùn)行結(jié)果為:C:\>javaArrayTesta[4]=4a[3]=3a[2]=2a[1]=1a[0]=01、數(shù)組 ——一維數(shù)組:示例運(yùn)行結(jié)果為:1、數(shù)組59在任何語(yǔ)言中,多維數(shù)組都被看作數(shù)組的數(shù)組。比如二維數(shù)組是一個(gè)特殊的一維數(shù)組,其每一個(gè)元素又是一個(gè)一維數(shù)組。我們主要以二維數(shù)組為例來(lái)說(shuō)明,高維數(shù)組與此類似。1、數(shù)組 ——多維數(shù)組1、數(shù)組60二維數(shù)組的定義方式
typearrayName[][];
例如:intintArray[][];
也可以采用另一種定義方式:type[][]arrayName;與一維數(shù)組一樣,這時(shí)對(duì)數(shù)組元素也沒(méi)有分配內(nèi)存空間,同樣要使用運(yùn)算符new來(lái)分配內(nèi)存,然后才可以訪問(wèn)每個(gè)元素。1、數(shù)組 ——二維數(shù)組:定義二維數(shù)組的定義方式1、數(shù)組61二維數(shù)組的初始化也分為靜態(tài)和動(dòng)態(tài)兩種。
靜態(tài)初始化:在定義數(shù)組的同時(shí)為數(shù)組分配空間。intintArray[][]={{1,2},{2,3},{3,4}};不必指出數(shù)組每一維的大小,系統(tǒng)會(huì)根據(jù)初始化時(shí)給出的初始值的個(gè)數(shù)自動(dòng)算出數(shù)組每一維的大小。1、數(shù)組 ——二維數(shù)組:初始化二維數(shù)組的初始化也分為靜態(tài)和動(dòng)態(tài)兩種。1、數(shù)組62動(dòng)態(tài)初始化:對(duì)高維數(shù)組來(lái)說(shuō),分配內(nèi)存空間有下面兩種方法:1.直接為每一維分配空間,如:typearrayName[][]=newtype[arraylength1][arraylength2]例如:inta[][]=newint[2][3];1、數(shù)組 ——二維數(shù)組:初始化動(dòng)態(tài)初始化:對(duì)高維數(shù)組來(lái)說(shuō),分配內(nèi)存空間有下面兩種方法:1、632.從最高維開始(而且必須從最高維開始),分別為每一維分配空間,如:
Strings[][]=newString[2][];s[0]=newString[2];s[1]=newString[3];s[0][0]=newString(“Good”);s[0][1]=newString(“Luck”);s[1][0]=newString(“to”);s[1][1]=newString(“you”);s[1][2]=newString(“!”);1、數(shù)組 ——二維數(shù)組:初始化2.從最高維開始(而且必須從最高維開始),分別為每一維分配空64二維數(shù)組的引用對(duì)二維數(shù)組中每個(gè)元素,引用方式為:arrayName[index1][index2]其中index1和index2為數(shù)組下標(biāo),為整型常數(shù)和表達(dá)式,都是0序的。二維數(shù)組舉例兩個(gè)矩陣相乘,參照參考書在課余時(shí)間上機(jī)練習(xí)。1、數(shù)組 ——二維數(shù)組:引用及示例二維數(shù)組的引用1、數(shù)組65數(shù)組是用來(lái)表達(dá)一組同類型數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)在Java中數(shù)組是定長(zhǎng)的,數(shù)組的大小不會(huì)動(dòng)態(tài)變化數(shù)組變量的值是數(shù)組對(duì)象實(shí)例的引用在java.util包中的Arrays類提供了一些操作數(shù)組的方法在java.util包中的Vector提供了動(dòng)態(tài)變長(zhǎng)數(shù)組的功能,Vector的容量可以隨著需要變化1、數(shù)組 ——java.util.Arrays數(shù)組是用來(lái)表達(dá)一組同類型數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)1、數(shù)組66intbinarySearch(typea[],typekey)數(shù)組a必須已經(jīng)排序,否則返回值無(wú)意義當(dāng)數(shù)組a中有重復(fù)的值時(shí),該方法返回的值不確定如果key存在,則返回它在數(shù)組a中的位置如果不存在,則返回它的“-(插入位置-1)”voidfill(typea[],typeval) voidfill(typea[],intfromIndx,inttoIndex,typeval)包括a[fromIndx],但不包括a[toIndex]fromIndx==toIndex時(shí),范圍是一個(gè)空的范圍1、數(shù)組 ——java.util.ArraysintbinarySearch(typea[],typ67booleanequals(typea[],typea2[])兩個(gè)數(shù)組大小相同,并且每一個(gè)元素相等兩個(gè)null數(shù)組是相等的1、數(shù)組 ——java.util.Arraysbooleanequals(typea[],type68voidsort(typea[]) voidsort(typea[],intfromIndx,inttoIndex) voidsort(typea[],Comparator
c) voidsort(typea[],intfromIndx,inttoIndex,Comparator
c)包括a[fromIndx],但不包括a[toIndex]fromIndx==toIndex時(shí),范圍是一個(gè)空的范圍排序算法都具有n*log(n)的計(jì)算復(fù)雜性,效率高排序算法都保證穩(wěn)定,即排序算法不會(huì)改變相等元素的順序?qū)Σ煌愋偷臄?shù)組,算法的實(shí)現(xiàn)并不完全相同可以用自己的Comparator對(duì)象聲明自定義的順序1、數(shù)組 ——java.util.Arraysvoidsort(typea[])1、數(shù)組69java.lang.Systemvoidarraycopy(Object
src,int
src_position, Object
dst,int
dst_position,int
length)范圍不能越界可對(duì)任何同類型的數(shù)組進(jìn)行復(fù)制數(shù)組復(fù)制過(guò)程中做嚴(yán)格的類型檢查更詳細(xì)的內(nèi)容參見JDK文檔1、數(shù)組 ——數(shù)組的復(fù)制java.lang.System1、數(shù)組703、字符串字符串是字符的序列,它是組織字符的基本數(shù)據(jù)結(jié)構(gòu),從某種程度上來(lái)說(shuō)有些類似于字符的數(shù)組。在Java中,字符串被當(dāng)作對(duì)象來(lái)處理。程序中需要用到的字符串可以分為兩大類,一類是創(chuàng)建之后不會(huì)再做修改和變動(dòng)的字符串常量;另一類是創(chuàng)建之后允許再做更改和變化的字符串變量。對(duì)于字符串常量,由于程序中經(jīng)常需要對(duì)它做比較,搜索之類的操作,所以通常把它放在一個(gè)具有一定名稱的對(duì)象之中,由程序?qū)υ搶?duì)象完成上述操作。在Java中,存放字符串常量的對(duì)象用String類,對(duì)于字符串變量,由于程序中經(jīng)常需要對(duì)它做添加,插入,修改等操作,一般存放在StringBuffer類的對(duì)象中。3、字符串字符串是字符的序列,它是組織字符的基本數(shù)據(jù)713、字符串 ——String字符串常量使用雙引號(hào)括住的一串字符,比如:
"Helloworld!"Java編譯器自動(dòng)為每一個(gè)字符串常量生成一個(gè)String類的實(shí)例,因此可以用字符串常量直接初始化一個(gè)String對(duì)象,如:
Strings="Helloworld!";3、字符串72要?jiǎng)?chuàng)建類String的一個(gè)對(duì)象并進(jìn)行初始化,需要調(diào)用類String的構(gòu)造方法。類String中提供了下面的一些構(gòu)造方法:String():無(wú)參數(shù)的缺省的構(gòu)造方法用來(lái)創(chuàng)建一個(gè)空串。
Strings=newString();
String(Stringvalue):利用已經(jīng)存在的字符串常量創(chuàng)建一個(gè)新的String對(duì)象,該對(duì)象的內(nèi)容與給出的字符串常量一致。Strings=newString(“hello”);String(charvalue[]):通過(guò)給構(gòu)造方法傳遞一個(gè)字符數(shù)組可以創(chuàng)建一個(gè)非空串。 charchars[]={‘a(chǎn)’,‘b’,‘c’};
Strings=newString(chars);
3、字符串 ——String:創(chuàng)建要?jiǎng)?chuàng)建類String的一個(gè)對(duì)象并進(jìn)行初始化,需要調(diào)用類3、字73String(char[],intstartIndex,intnumChars):這種方法用來(lái)創(chuàng)建一個(gè)非空串,并且指明所創(chuàng)建的字符串在字符數(shù)組中的起始地址以及所包含的字符個(gè)數(shù)。charchars[]={'a','b','c','d','e','f'};Strings=newString(chars,2,3);該方法生成的串s為“cde”。(注意數(shù)組的下標(biāo)從0開始)3、字符串 ——String:創(chuàng)建String(char[],intstartIn74String(bytemybyte[],bytehibyte):因?yàn)樵贗nternet上,格式采用八位的ASCII碼,所以Java的類String提供了從byte型數(shù)組進(jìn)行初始化的構(gòu)造方法。其中hibyte指明各字符的高位字節(jié),對(duì)于通常所用的ASCII碼,必須將高位字節(jié)聲明為零,而其他的非拉丁文字符則置為非零。
bytemybyte[]={97,98,99}; Strings=newString(mybyte,0);該方法構(gòu)造的字符串s是“abc”。3、字符串 ——String:創(chuàng)建String(bytemybyte[],bytehi75String(bytemybyte[],bytehibyte,intstartIndex,intnumChars):這種構(gòu)造方法與String(char[],intstartIndex,intnumChars)類似,只是初始化的數(shù)組類型不同。
bytemybyte[]={80,81,82,83,84,85}; Strings=newString(mybyte,0,2,3);該方法構(gòu)造的字符串s是“RST”。String(StringBufferbuffer):這個(gè)構(gòu)造函數(shù)利用一個(gè)已經(jīng)存在的StringBuffer對(duì)象為新建的String對(duì)象初始化。3、字符串 ——String:創(chuàng)建String(bytemybyte[],bytehi76
1.lengthpublicintlength()此方法返回字符串的字符個(gè)數(shù),如:
Strings="abc"; System.out.println(s.length());則將顯示字符個(gè)數(shù)為3。3、字符串 ——String:基本方法3、字符串772.charAtpubliccharcharAt(intindex) 該方法返回字符串中index位置上的字符,其中index值的范圍是0~length-1。3.getChars 如果要從字符串中提取一個(gè)以上的字符,則可以用此方法:publicvoidgetchars(intsrcbegin,intend,charbuf[],intdstbegin) 其中,srcbegin為要提取的第一個(gè)字符在源串中的位置, end為要提取的最后一個(gè)字符在源串中的位置,字符數(shù)組buf[]存放目的字符串,dstbegin為提取的字符串在目的串中的起始位置。3、字符串 ——String:基本方法2.charAt3、字符串784.getbytespublicvoidgetbytes(intsrcbegin,intend,bytebyt[],intdstbegin)類似于上一個(gè)方法,只是串中的字符均用8位表示,參數(shù)及用法同上。5.indexOf和lastIndexOf 為了在給定的字符串中檢索特定的字符或子串,類String提供了上面兩種方法,并通過(guò)方法重寫更方便的處理這類問(wèn)題。這兩種方法中,如果查找成功,則返回匹配成功的字符的位置,如果沒(méi)有查找到,則都返回-1。intindexOf(intch)intlastIndexOf(intch)返回字符ch在字符串中出現(xiàn)的第一個(gè)和最后一個(gè)位置。3、字符串 ——String:基本方法4.getbytes3、字符串79 intindexOf(Stringstr) intlastindexOf(Stringstr) 返回子串str中第一個(gè)字符在字符串中出現(xiàn)的始末位置。 intindexOf(intch,intfromIndex)) intlastIndexOf(intch,intfromIndex)) 返回字符ch在字符串中位置fromIndex以后出現(xiàn)的始末位置。intindexOf(Stringstr,intfromIndex) intlastIndexOf(Stringstr,intfromIndex) 返回子串str中的第一個(gè)字符在字符串中位置fromIndex 以后出現(xiàn)的始末位置。3、字符串 ——String:基本方法 intindexOf(Stringstr)3、字符串806.+ 在Java中,運(yùn)算符“+”可以用來(lái)實(shí)現(xiàn)字符串的連接,如: Strings=“Heis”+
age
+“yearsold.” 假設(shè)整數(shù)型變量age的值為15,那么,s的值為 “Heis15yearsOld”。7.compareTo publicintcompareTo(Stringstr) 該方法按字典次序比較兩個(gè)字符串的大小,如果源串較小,則返回一個(gè)小于0的值,如相等則返回0,否則返回一個(gè)大于0的值。3、字符串 ——String:基本方法6.+3、字符串818.regionMatches booleanregionMatches
(inttoffset,Stringother,intooffset,intlen)
booleanregionMatches
(booleanignoreCase,inttoffset,Stringother, intooffset,intlen)上述兩個(gè)方法都是用來(lái)進(jìn)行模式匹配的,匹配成功則返回true,否則返回false。其中,toffset和ooffset分別指明當(dāng)前字符串和參數(shù)字符串中所要比較的子串的起始索引位置,len指明比較的長(zhǎng)度,而ignoreCase指明比較時(shí)是否區(qū)分大小寫。對(duì)于第一種方法,比較是區(qū)分大小寫的。Ex:regionMatches(2,abcdef,2,3),此時(shí)“cde”為模式,與indexOf相似。3、字符串 ——String:基本方法8.regionMatches3、字符串829.equals和equalsIgnoreCase publicbooleanequals(objectstr) publicbooleanequalsIgnoreCase(objectstr) 判斷兩個(gè)字符串是否相等,則可以用此方法。相等則返回true,不等則返回false,兩種方法的區(qū)別在于equalsIgnoreCase不區(qū)分字母大小寫,而equals則須區(qū)分。10.其他方法 publicStringconcat(Stringstr); 將當(dāng)前字符串對(duì)象與給定的字符串str連接起來(lái)。3、字符串 ——String:基本方法9.equals和equalsIgnoreCase3、字83publicStringreplace(charoldChar,charnewChar)將串中出現(xiàn)的特定字符用新的字符代替。publicStringsubstring(intbeginIndex)publicStringsubstring(intbeginIndex,intendIndex)用來(lái)得到字符串中指定范圍內(nèi)的子串。publicStringtoLowerCase()把串中的所有字符轉(zhuǎn)換成小寫publicStringtoUpperCase()把串中的所有字符轉(zhuǎn)換成大寫3、字符串 ——String:基本方法publicStringreplace(charold84classStringCopyModify{publicstaticvoidmain(Stringargs[]){Strings=newString("WewillgofurthertomodifyaStringbycopy!");System.out.println("FromString\""+s+"\"");Stringsub1=s.substring(20);Stringsub2=s.substring(0,19);System.out.println(“Getasubstringfromindex20totheend:"+sub1);System.out.println(“Getasubstringfromindex0to19:"+sub2);Stringcons=sub2.concat(sub1);System.out.println(“Concattwosubstringintoone:\n"+cons);}}3、字符串 ——String:示例classStringCopyModify3、字符串85運(yùn)行結(jié)果為:
FromString“WewillgofurthertomodifyaStringbycopy”Getasubstringfromindex20totheend:tomodifyaStringbycopyGetasubstringfromindex0to19:WewillgofurtherConcattwosubstringsintoone:Wewillgof
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 名牌轎車買賣合同
- 居間合同咨詢服務(wù)合同
- 關(guān)于推進(jìn)數(shù)字化轉(zhuǎn)型的討論
- 個(gè)人雙包裝修合同7篇
- 2025年白城貨運(yùn)資格證考試口訣
- 兼職合同合作協(xié)議
- 2025年長(zhǎng)春貨運(yùn)從業(yè)資格證考試模擬考試題目答案
- 合伙共同經(jīng)營(yíng)賓館合同8篇
- 個(gè)人房屋抵押借款服務(wù)合同5篇
- 新編信托借款合同5篇
- 檢驗(yàn)檢測(cè)中心檢驗(yàn)員聘用合同
- 藝術(shù)創(chuàng)新的思維技巧
- 古詩(shī)文教學(xué)方法創(chuàng)新研究
- 商場(chǎng)扶梯安全培訓(xùn)
- 《全科醫(yī)學(xué)概論》課件-以家庭為單位的健康照顧
- 自來(lái)水廠安全施工組織設(shè)計(jì)
- 川教版2024-2025學(xué)年六年級(jí)下冊(cè)信息技術(shù)全冊(cè)教案
- KTV商務(wù)禮儀培訓(xùn)
- 2024年《論教育》全文課件
- 計(jì)算機(jī)網(wǎng)絡(luò)與信息安全(2024年版)課件 李全龍 第1-4章計(jì)算機(jī)網(wǎng)絡(luò)與信息安全概述-網(wǎng)絡(luò)層服務(wù)與協(xié)議
- 人工智能教育背景下中小學(xué)教師智能教育素養(yǎng)提升路徑研究
評(píng)論
0/150
提交評(píng)論