第4章數(shù)組與字符串.ppt_第1頁
第4章數(shù)組與字符串.ppt_第2頁
第4章數(shù)組與字符串.ppt_第3頁
第4章數(shù)組與字符串.ppt_第4頁
第4章數(shù)組與字符串.ppt_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章 數(shù)組與字符串,本章主要內(nèi)容 數(shù)組的概念、聲明、創(chuàng)建、初始化和使用方法; 數(shù)組編程方法; 字符串的概念; String類、StringBuffer類中的有關(guān)方法; 正則表達式與字符串的替換和分解。,4.1 數(shù)組,數(shù)組的主要特點如下: (1)一個數(shù)組中的元素應(yīng)該是相同數(shù)據(jù)類型的。 (2)數(shù)組中的各個元素是有序的,它們在內(nèi)存中是按照先后順序連續(xù)存放在一起的。 (3)每個數(shù)組元素用其所在數(shù)組的名字和數(shù)組下標(biāo)來確定。 (4)數(shù)組的下標(biāo)是從0開始的,數(shù)組的長度是指其所包含的數(shù)組元素的個數(shù)。 除了基本數(shù)據(jù)類型外,Java還提供了數(shù)組類型,數(shù)組類型是一種引用數(shù)據(jù)類型,數(shù)組元素可以是簡單數(shù)據(jù)類型,也可以

2、是對象數(shù)據(jù)類型。,4.1.1 一維數(shù)組 Java的數(shù)組數(shù)據(jù)類型是引用數(shù)據(jù)類型,要想使用數(shù)組,必須經(jīng)過定義數(shù)組、創(chuàng)建數(shù)組和數(shù)組初始化等步驟。 1.一維數(shù)組的聲明 聲明數(shù)組包括數(shù)組的名字、數(shù)組包含的元素的數(shù)據(jù)類型。 聲明一維數(shù)組的格式有如下兩種: 數(shù)組元素類型 數(shù)組名;/格式1 數(shù)組元素類型 數(shù)組名;/格式2 例如:為方便計算4名同學(xué)的平均成績,可以聲明能夠保存4個同學(xué)成績的數(shù)組,該數(shù)組的聲明可以任意采用如下兩種方式之一: double score; double score;,4.1 數(shù)組,數(shù)組元素既可以是簡單數(shù)據(jù)類型,也可以是對象等引用數(shù)據(jù)類型。例如,可以定義一個3名學(xué)生的數(shù)組,每個元素均為一

3、個學(xué)生對象,其聲明如下: Student student; Student student; 2.數(shù)組的創(chuàng)建 Java不同于以前基本數(shù)據(jù)類型變量的聲明,聲明一個數(shù)組時,并不在內(nèi)存中給數(shù)組分配任何空間,僅僅創(chuàng)建了一個引用數(shù)組的存取地址。數(shù)組聲明的目的只是告訴系統(tǒng)一個新的數(shù)組的名稱和類型,數(shù)組本身不能存放任何數(shù)組元素,現(xiàn)階段的數(shù)組值為null。因此,使用數(shù)組之前,需要先使用new關(guān)鍵字創(chuàng)建數(shù)組,為數(shù)組分配指定長度的內(nèi)存空間。,4.1 數(shù)組,為數(shù)組分配內(nèi)存空間的格式如下: 數(shù)組名 = new 數(shù)組元素的類型 數(shù)組的長度; 例如: score = new double 4; student = new

4、 Student3; 這樣,就給數(shù)組score分配了內(nèi)存空間,用來保存4個double類型的數(shù)據(jù),為student分配了內(nèi)存空間,用來保存3個Student對象。 3.數(shù)組的初始化 數(shù)組創(chuàng)建后,不對其進行初始化,系統(tǒng)會根據(jù)其類型自動為元素賦值。如果數(shù)組的元素是基本類型的元素,數(shù)組中元素默認初始化的值是基本類型的默認值,如表4-1所示。如果數(shù)組元素是對象等引用數(shù)據(jù)類型,元素的默認初始化值是null。,4.1 數(shù)組,表4-1基本數(shù)據(jù)類型的數(shù)組元素的默認初值,4.1 數(shù)組,也可以在聲明數(shù)組的同時給數(shù)組進行初始化,例如: double score = 98.8,85,78,100; 這個初始化語句相當(dāng)

5、于以下語句: double score = new double 4; score0 = 98.8; score1 = 85; score2 = 78; score3 = 100; 數(shù)組元素是對象等引用數(shù)據(jù)類型時,數(shù)組初始化時需要創(chuàng)建對象,例如: student = new Student3; student0 = new Student(“zhang ”); student1 = new Student(“wang ”); student2 = new Student(“zhao ”);,4.1 數(shù)組,4.數(shù)組的使用 (1)數(shù)組的長度 所有的數(shù)組都有一個屬性length(長度),它存儲了數(shù)組

6、元素的個數(shù)。例如,score.length指明數(shù)組score的長度。 (2)數(shù)組元素的訪問 使用數(shù)組時要注意下標(biāo)值不要超出范圍,數(shù)組元素的下標(biāo)從0開始,直到數(shù)組元素個數(shù)減l為止,如果下標(biāo)超出范圍,則運行時會產(chǎn)生“數(shù)組訪問越界異常”。在實際應(yīng)用中,經(jīng)常借助循環(huán)來控制對數(shù)組元素的訪問,訪問數(shù)組的下標(biāo)隨循環(huán)控制變量變化。,4.1 數(shù)組,【例4-1】逐個輸入并計算10個學(xué)生的平均成績和最好成績。 源程序如下: import java.io.*; import javax.swing.JOptionPane; public class Ex4_1_StudentScore public static v

7、oid main(String args) throws IOException int k, count = 2;/ count為學(xué)生的個數(shù) double score = new doublecount;/ 學(xué)生的成績數(shù)組 double doubleSum = 0.0, doubleAver = 0.0,maxScore=0.0;,4.1 數(shù)組,/ 學(xué)生的總成績、平均成績和最高成績 boolean contiGo = true; String str; BufferedReader buf = new BufferedReader( new InputStreamReader(System.

8、in); for (k = 0; k count; k+) while (contiGo) System.out.print(請輸入第 + (k + 1) + 個學(xué)生的成績:); str = buf.readLine( ); try / 處理輸入非數(shù)值數(shù)據(jù)或輸入的數(shù)是0 scorek = Double.parseDouble(str);,4.1 數(shù)組,if (0 scorek | 100 maxScore) maxScore = scorek; ,4.1 數(shù)組,doubleAver = doubleSum / count;/平均成績保留2位小數(shù) System.out.println(這 + c

9、ount + 個同學(xué)的平均成績是: + doubleAver); System.out.println(這 + count + 個同學(xué)的最好成績是: + maxScore); (3)數(shù)組的復(fù)制 可以把一個數(shù)組的變量賦值給另外一個數(shù)組,但是兩個變量引用的都是同一個內(nèi)存空間,因此,這種情況下,改變一個數(shù)組的值,另一個數(shù)組變量也會改變。例如: int num =4,2,3,1,9,0; int numCopy = num; numCopy2=2;,4.1 數(shù)組,以上數(shù)組復(fù)制語句的執(zhí)行過程如圖4-1所示,執(zhí)行以上語句之后,num2的值也由原來的3變?yōu)?。,圖4-1 數(shù)組復(fù)制,4.1 數(shù)組,如果確實需要

10、將數(shù)組中的元素的值復(fù)制給另外一個元素,而又不想改變原數(shù)組的值,可以采用System類中的arrayCopy()方法,其格式如下: System.arraycopy(src, srcPos, dest, destPos, length) 該方法可以將src源數(shù)組中從srcPos開始的連續(xù)length個元素復(fù)制到dest數(shù)組的從destPos開始位置,且src和dest數(shù)組指向不同的內(nèi)存空間。 【例4-2】逐個輸入10個學(xué)生的成績,并將其從大到小逆序輸出。 源程序如下: import java.io.*; import javax.swing.JOptionPane; public class E

11、x4_2_StudentScore ,4.1 數(shù)組,public static void main(String args) throws IOException int k, count = 5;/ count為學(xué)生的個數(shù) double score = new doublecount;/ 學(xué)生的成績數(shù)組 boolean contiGo = true; String str; BufferedReader buf = new BufferedReader( new InputStreamReader(System.in); for (k = 0; k scorek | 100 scorek)

12、,4.1 數(shù)組,JOptionPane.showMessageDialog(null, 成績不應(yīng)該0, 請重新輸入。,提示信息, JOptionPane.QUESTION_MESSAGE); else break; catch (Exception ne) JOptionPane.showMessageDialog( null, 輸入的不是數(shù)據(jù),不符合規(guī)定,請重新輸入。, 提示信息, JOptionPane.QUESTION_MESSAGE); ,4.1 數(shù)組,/ 采用冒泡法,對成績排序 double scoreCopy = new doublecount+1; double temp = 0

13、; System.arraycopy(score, 0, scoreCopy, 1, score.length); for (k = 1; k scoreCopym + 1) temp = scoreCopym; scoreCopym = scoreCopym + 1; scoreCopym + 1 = temp; ,4.1 數(shù)組,System.out.println(這 + score.length + 個同學(xué)的成績?nèi)缦拢?; for (int j = 0; j score.length; j+) System.out.print(scorej + t); System.out.printl

14、n(n 這 + score.length + 個同學(xué)的成績從低到高排序如下:); for (int j = 1; j scoreCopy.length; j+) System.out.print(scoreCopyj + t); 以上程序中使用了System.arraycopy方法,因此scoreCopy修改并不影響score元素的值。,4.1 數(shù)組,4.1.2 多維數(shù)組 Java語言將多維數(shù)組看作數(shù)組的數(shù)組,也就是說,Java允許定義數(shù)組的元素是一維數(shù)組或多維數(shù)組。例如,可將二維數(shù)組看成是一個特殊的一維數(shù)組,其每一個元素均是一個一維數(shù)組;三維數(shù)組也可被看成是二維數(shù)組構(gòu)成的數(shù)組;依次類推,n維

15、數(shù)組的每個元素都是n-1維數(shù)組。 由于多維數(shù)組的元素也是數(shù)組,所以需要為數(shù)組元素分配相應(yīng)的存儲空間,分配空間可以在創(chuàng)建數(shù)組的同時進行,也可以用new運算符為數(shù)組元素分配內(nèi)存。如果多維數(shù)組中每維數(shù)組的長度不同,那么就造成數(shù)組空間的分配不是連續(xù)的。當(dāng)然,一維數(shù)組的空間仍然是連續(xù)分配的。 下面主要以二維數(shù)組為例,說明二維數(shù)組如何進行定義、創(chuàng)建和使用等,多維數(shù)組的情況與二維數(shù)組類似。,4.1 數(shù)組,1.二維數(shù)組的聲明 聲明二維數(shù)組有以下兩種格式: 數(shù)組元素類型 數(shù)組名 ;/格式1 數(shù)組元素類型 數(shù)組名;/格式2 例如: double score ; 或 double score; 2.二維數(shù)組的初始化

16、 二維數(shù)組的初始化可以通過new關(guān)鍵字初始化,或在聲明的同時使用賦值語句初始化。 (1)用new初始化 對于已經(jīng)聲明的二維數(shù)組,可以使用new關(guān)鍵字對其進行初始化,格式如下: 數(shù)組名 = new 數(shù)組元素的類型 數(shù)組的行數(shù)數(shù)組的列數(shù);,4.1 數(shù)組,例如: score = new double 43; 表明score是一個4行3列的數(shù)組,初始化時每個元素均為0.0。 二維數(shù)組的元素是一維數(shù)組,因此,初始化時也可允許各行單獨進行。例如可以采用如下方式進行初始化: double score; score = new double3; score0 = new double3; score1 = n

17、ew double2; score2 = new double4; 從上面的例子可以看出,Java的二維數(shù)組允許各行有不同的元素個數(shù)。,4.1 數(shù)組,(2)用賦初值的方法初始化 對于已經(jīng)聲明的二維數(shù)組,也可以使用給數(shù)組元素賦初值的方式進行初始化,格式如下: 類型 數(shù)組名=初值表1,初值表2, 初值表n,; 例如:double score =56.8,42.5,96.8;100,78,99,63,78,45 3.二維數(shù)組的使用 二維數(shù)組中使用兩個下標(biāo):一個表示行,一個表示列,每個下標(biāo)的類型都是int類型的,并且是從0開始的??梢酝ㄟ^元素在數(shù)組中的行號和列號訪問元素,如score10可以訪問sco

18、re數(shù)組中的第2行第1列元素。,4.1 數(shù)組,可以通過length來獲得二維數(shù)組的行數(shù)和每行包含元素的個數(shù)。獲得行數(shù)的方法如下: 數(shù)組名.length / 獲得數(shù)組的行數(shù) 獲得指定行所包含列數(shù)的方法如下: 數(shù)組名行號.length/ 獲得數(shù)組指定行的列數(shù) 例如,上例中,score.length 為3,score1.length為2。 【例4-3】編寫程序?qū)崿F(xiàn)兩個二維矩陣的乘法。為了程序簡單,數(shù)組中的元素隨機生成。 源程序如下: import java.io.*; public class Ex4_3_MatrixMultiply public static void main(String a

19、rgs) throws IOException,4.1 數(shù)組, int j,k,m,aH=2,aL=3,bL=4,a,b,c;/暫設(shè)a數(shù)組大小為23,b數(shù)組為34 BufferedReader buf=new BufferedReader(new InputStreamReader(System.in); String str; a=new intaHaL; b=new intaLbL; c=new intaHbL; /隨機產(chǎn)生兩個數(shù)組的元素 for(j=0;jaH;j+) for(k=0;kaL;k+) ajk=(int)(Math.random()*10); ,4.1 數(shù)組,for(j=0

20、;jaL;j+) for(k=0;kbL;k+) bjk=(int)(Math.random()*10); System.out.println(a矩陣元素如下:); for(j=0;jaH;j+) for(k=0;kaL;k+) System.out.print(ajk+t); System.out.println(); System.out.println(b矩陣元素如下:); for(j=0;jaL;j+) for(k=0;kbL;k+) System.out.print(bjk+t);,4.1 數(shù)組,System.out.println(); System.out.println(求出

21、的(c=ab)矩陣元素如下:); for(j=0;jaH;j+) for(m=0;mbL;m+) for(k=0;kaL;k+) cjm=cjm+ajk*bkm;/矩陣相乘計算關(guān)鍵算法 System.out.print(cjm+tt); System.out.println(); ,4.1 數(shù)組,程序的執(zhí)行結(jié)果如下:,a矩陣元素如下: 229 902 b矩陣元素如下: 0553 7984 2245 求出的(c=ab)矩陣元素如下: 32466259 4495337,4.1 數(shù)組,【例4-4】一個年級有m個班,每個班包含n個學(xué)生。編寫程序,用二維數(shù)組保存學(xué)生成績,計算每個班的平均分數(shù)。 源程序如

22、下: import java.io.*; import javax.swing.JOptionPane; public class Ex4_4_StudentScore public static void main(String args) throws IOException / TODO Auto-generated method stub int classCount = 3;/ 暫定3個班 int studentCount = 2, 3, 5 ;,4.1 數(shù)組,/ 每個班的學(xué)生數(shù)量,為簡單,暫定每個班的學(xué)生分別為2、3、5個學(xué)生 double score = new double3;

23、 boolean contiGo = true; for (int i=0;iscore.length;i+) /初始化score scorei = new double studentCounti; /輸入每個班每名同學(xué)的成績 String str; BufferedReader buf = new BufferedReader( new InputStreamReader(System.in); for (int i = 0; i classCount; i+) for (int k = 0; k studentCounti; k+) while (contiGo) System.out.

24、println(請輸入第 + (i + 1) + 個班第 + (k + 1) + 個學(xué)生的成績:);,4.1 數(shù)組,try / 處理輸入非數(shù)值數(shù)據(jù)或輸入的數(shù)是0 scoreik = Double.parseDouble(str); if (0 scoreik | 100 scoreik) JOptionPane.showMessageDialog(null, 成績不應(yīng)該0,請重新輸入。, 提示信息, JOptionPane.QUESTION_MESSAGE); else break; catch (Exception ne) System.out.println(ne);,4.1 數(shù)組,JOp

25、tionPane.showMessageDialog(null, “輸入的不是數(shù)據(jù), 不符合規(guī)定,請重新輸入。, 提示信息,JOptionPane.QUESTION_MESSAGE); /計算每班的均分 double sumScore=0,avgScore=0; for (int i=0;iscore.length;i+) sumScore=0;,4.1 數(shù)組,for (int k = 0; k studentCounti; k+) sumScore=sumScore+scoreik; avgScore = sumScore/studentCounti; System.out.println(

26、第 + (i + 1) + 個班的平均成績?yōu)?avgScore ); 4.二維以上數(shù)組的聲明與使用 實際上,二維以上數(shù)組聲明時,只需要再增加幾對方括號即可。例如,int a來聲明三維整形數(shù)組,用Student s來聲明四維學(xué)生數(shù)組,依次類推。 二維以上數(shù)組初始化時,同樣使用new關(guān)鍵字,例如a=new int742、s= new Student4567 ,依次類推。也可以在聲明的時候直接使用賦值語句進行初始化,,4.1 數(shù)組,例如:int b=1,2,3,4,5,6,7,8; 獲得二維以上數(shù)組的元素需要使用多個下標(biāo),例如a130、s1032 ,依次類推。 4.1.3 數(shù)組類Arrays Jav

27、a的工具包util中提供了工具類Arrays,該類定義了常見操作數(shù)組的靜態(tài)方法,可以方便進行數(shù)組操作(如排序和搜索等)。 Arrays提供有四種基本方法:equals( )用于比較兩個數(shù)組是否相等;fill( )用于以某個值填充整個數(shù)組;sort( )用于對數(shù)組排序;binarySearch( )用于在已經(jīng)排序的數(shù)組中查找元素。此外,方法asList()接受任意的數(shù)組為參數(shù),并將其轉(zhuǎn)變?yōu)長ist容器。以上方法均被重載,可以操作不同數(shù)據(jù)類型的數(shù)組,具體內(nèi)容詳見JDK文檔。,4.1 數(shù)組,【例4-5】使用Arrays類進行數(shù)組元素排序 import java.util.*; public clas

28、s Ex4_5_Arrays public static void main(String args) int k,baka=new int11,a=19,22,15,13,1,0,10,8,2,4,36; System.out.println(tt排序前a數(shù)組各元素為:); for(k=0;ka.length;k+) System.out.print(ak+t); bakak=ak; System.out.println(); Arrays.sort(a); System.out.println(tt完全排序后a數(shù)組各元素為:);,4.1 數(shù)組,for(k=0;ka.length;k+) S

29、ystem.out.print(ak+t); System.out.println(); for(k=0;kbaka.length;k+) ak=bakak; Arrays.sort(a,3,8); System.out.println(部分(第3個至第7個元素)排序后a數(shù)組各元素為:); for(k=0;ka.length;k+) System.out.print(ak+t); System.out.println(); ,4.1 數(shù)組,程序運行結(jié)果如下:,排序前a數(shù)組各元素為: 19221513101082436 完全排序后a數(shù)組各元素為: 01248101315192236 部分(第3個

30、至第7個元素)排序后a數(shù)組各元素為: 19221501810132436,4.1 數(shù)組,4.2 字符串,字符串是編程時經(jīng)常使用到的一種數(shù)據(jù)類型。Java中使用string類和StringBuffer來封裝字符串。String類給出了不變字符串的操作,StringBuffer類則用于可變字符串處理。換句話說,String類創(chuàng)建的字符串是不會改變的,而StringBuffer類創(chuàng)建的字符串可以修改。 4.2.1字符串的聲明與創(chuàng)建 聲明字符串的格式如下: String stringName; 例如:String studentName; 字符串的創(chuàng)建可以有以下幾種方法: (1)使用字符串構(gòu)造方法 字

31、符串的構(gòu)造方法有如下4個。,public String (); /創(chuàng)建一個空的字符串。 public String (String s); /用已有字符串創(chuàng)建新的String。 public String (StringBuffer buf) ; /用StringBuffer對象的內(nèi)容初始化新String。 public String (char value); /用已有字符數(shù)組初始化新String。 以上構(gòu)造方法中,使用最多的是第2個,即用另一個串作為參數(shù)創(chuàng)建一個新串對象,例如: String s new String(“Hello World“); 字符數(shù)組要轉(zhuǎn)化為字符串可以利用第3個構(gòu)造

32、方法。例如: Char helloArray=h,e,l,l,o; String s = new String(helloArray);,4.2 字符串,(2)使用賦值語句 也可以直接給String變量賦值。例如: String s=”Student”; 這里需要注意,字符串常量在Java中也是以對象形式存儲,Java編譯時將自動為每個字符串常量創(chuàng)建一個對象。因此,將字符串常量傳遞給字符串變量時,Java編譯器自動將常量對應(yīng)的對象傳遞給字符串變量。 因此下面的兩條語句,兩個字符串變量s1與s2均指向同一個內(nèi)存空間,其內(nèi)存配示意如圖4-2所示。 String s1=”Student”; Stri

33、ng s2=”Student”;,圖4-2 字符串常量賦值內(nèi)存示意,4.2 字符串,4.2.2 字符串類String的主要方法 與字符串相關(guān)的方法很多,下面僅列舉一些常用的方法。 1.獲得字符串長度 字符串的長度是指字符串內(nèi)包含的字符個數(shù),例如:字符串“我愛你 china”的長度為9。 確定字符串長度的方法格式如下: public int length (); 可以使用字符串.length() 的形式來獲得字符串的長度,例如: String s2=new String(我愛你 china); System.out.println(s2.length(); 2.截取一個字符 public cha

34、r charAt(int index) 該方法返回指定索引處的char值。索引范圍為從0到length()-1。字符串的第一個char值在索引0處,第二個在索引1處,依此類推。,4.2 字符串,例如: char ch; ch=abc.charAt(1); 返回b 3.字符串相等比較 public boolean equals s(String s) 字符串對象調(diào)用String類的equals方法,比較當(dāng)前字符串對象是否與參數(shù)制定的字符串s對象相同。如: String s1=Hello; String s2=new String(Hello); s1.eauals(s2); /true Java

35、提供忽略大小寫的字符串相等比較方法,其格式如下: public boolean equalsIgnoreCase(String anotherString),4.2 字符串,將此String 與anotherString進行比較,不考慮大小寫。如果兩個字符串的長度相等,并且兩個字符串中的相應(yīng)字符都相等(忽略大小寫),則認為這兩個字符串是相等的。例如 hello.equalsIgnoreCase(Hello); /true 需要注意的是,=運算符比較兩個對象是否引用同一實例。如: String s1=Hello; String s2=Hello; String s3=new String(Hel

36、lo); boolean b1=(s1=s2); /true boolean b2=(s1=s3);/false s1.eauals(s3); /true,4.2 字符串,以上代碼的內(nèi)存分配情況如圖4-3所示,從該圖中不難看出,s1和s2為指向字符串常量對象實例,s3是另外一個字符串對象,其值也是“Hello”。=用于判斷兩個對象是否引用同一實例,因此s1=s3返回false。,圖4-3內(nèi)存分配示意,4.2 字符串,4.取得子串 public String substring(int beginIndex);/1 public String substring(int beginIndex,

37、int endIndex);/2 substring(int beginIndex)返回一個新的字符串,它是此字符串的一個子字符串。該子字符串始于指定索引處的字符,一直到此字符串末尾。 substring(int beginIndex, int endIndex)返回一個新字符串,它是此字符串的一個子字符串。該子字符串從指定的 beginIndex 處開始,一直到索引 endIndex - 1 處的字符。因此,該子字符串的長度為 endIndex-beginIndex。例如: unhappy.substring(2); /返回happy smiles.substring(1, 5); /返回m

38、ile,4.2 字符串,5.字符串連接 public String concat(String str) 該方法將指定字符串聯(lián)到此字符串的結(jié)尾。如果參數(shù)字符串的長度為 0,則返回此 String 對象。否則,創(chuàng)建一個新的 String 對象,用來表示由此 String 對象表示的字符序列和由參數(shù)字符串表示的字符序列串聯(lián)而成的字符序列。例如: cares.concat(s); /返回 caress to.concat(get).concat(her); /返回together 除此之外,還可以使用“+”運算符實現(xiàn)兩個字符串的連接。例如: 567+和789; /返回 567和789 注意,上述語句

39、中,整型567自動轉(zhuǎn)換為字符串后與和789進行字符串連接運算。,4.2 字符串,6.字符串內(nèi)容比較 public int compareTo(String anotherString) 按字典順序比較兩個字符串。該比較基于字符串中各個字符的Unicode值。將此String對象表示的字符序列與參數(shù)字符串所表示的字符序列進行比較。如果按字典順序此String對象在參數(shù)字符串之前,則比較結(jié)果為一個負整數(shù)。如果按字典順序此String對象位于參數(shù)字符串之后,則比較結(jié)果為一個正整數(shù)。如果這兩個字符串相等,則結(jié)果為0;compareTo 只有在方法equals(Object) 返回true時才返回0。

40、除此之外,Java提供不考慮大小寫的字典順序比較方法。其形式如下: public int compareToIgnoreCase(String str),4.2 字符串,例如: String s1 = abc; String s2 = ABC; String s3 = acb; String s4 = abc; System.out.println(pareTo(s2); / 輸出32 System.out.println(pareTo(s3); / 輸出-1 System.out.println(pareTo(s4); / 輸出0 System.out.println(pareToIgnor

41、eCase(s2); / 輸出0,7.字符串檢索 public int indexOf(int ch) public int indexOf(int ch,int fromIndex) public int indexOf(String stringName2) public int indexOf(String stringName2,int fromIndex),4.2 字符串,字符串檢索是指確定一個字符串是否(或從指定位置開始)包含某一個字符或子字符串,如果包含則返回其位置;如果沒有,則返回負數(shù)。例如: String s1 = I love java; System.out.printl

42、n(s1.indexOf(a); /輸出 8 System.out.println(s1.indexOf(j,2); /輸出 7 System.out.println(s1.indexOf(love); /輸出 2 System.out.println(s1.indexOf(love,9); /輸出 -1 8.字符串與字符數(shù)組的相互轉(zhuǎn)換 字符數(shù)組轉(zhuǎn)換以字符串: public static String copyValueOf(char ch1) public static String copyValueOf(char ch1,int cBegin,int cCount),4.2 字符串,例如

43、: char ch1=H,h; String s2=String.copyValueOf(ch1); /s2=Hh 字符數(shù)組轉(zhuǎn)換為字符串: public void getChars(int sBegin,int sEnd,charch1,int dBegin) public char toCharArray() 例如: String s=this is a demo of the getChars method.; char buf=new char20; s.getChars(10,14,buf,0); /buf的前4個元素為d e m o 9.去掉起始和結(jié)尾的空格 public Strin

44、g trim(),4.2 字符串,trim()返回刪除字符串起始和結(jié)束的空格后的字符串,如果沒有起始和結(jié)束空格,則返回此字符串。例如: tring s= this is a demo of the trim method. ; String s2=s.trim(); /s2= this is a demo of the trim method. 10.字符串替換 public String replace(char oldChar, char newChar) 例如: String s= the war of baronets.replace(r, y);/ s= the way of bay

45、onets“ 11.字符串大小寫轉(zhuǎn)換 將字符串中的大寫全部轉(zhuǎn)換為小寫: public String toLowerCase(),4.2 字符串,例如: String s= I Love Java. toLowerCase();/ s= i love java 將字符串中的小寫全部轉(zhuǎn)換為大寫: public String toUpperCase() 例如: String s=I Love Java. toUpperCase()/ s= I LOVE JAVA 12.將其他數(shù)據(jù)類型轉(zhuǎn)換為字符串 public static String valueOf(boolean b) public stati

46、c String valueOf(char c) public static String valueOf(int i) public static String valueOf(long L) public static String valueOf(float f) public static String valueOf(double d) 例如: String s1=String.valueOf(123); /s1= 123 String s2=String.valueOf(true); /s2= true String s3=String.valueOf(12.8); /s3= 12

47、.8,4.2 字符串,另外,Object類的toString()方法,也可實現(xiàn)將其他數(shù)據(jù)類型轉(zhuǎn)換為字符串。例如: String s=Double.toString(12.8); /s= 12.8 需要注意的是,Object類的toString()方法返回該對象的字符串表示。通常,toString方法會返回一個以文本方式表示此對象的字符串。結(jié)果應(yīng)是簡明但易于讀懂。建議所有子類都重寫此方法。有關(guān)Object類的詳細介紹見本書第十章。 13.字符串分割 public String split(String regex) public String split(String regex, int li

48、mit) 根據(jù)匹配給定的正則表達式來拆分字符串。此方法返回的數(shù)組包含此字符串的每個子字符串,這些子字符串由另一個匹配給定的表達式的子字符串終止或由字符串結(jié)束來終止。數(shù)組中的子字符串按它們在此字符串中的順序排列。如果表達式不匹配輸入的任何部分,則結(jié)果數(shù)組只具有一個元素,即此字符串。有關(guān)正則表達式的介紹詳見本書4.3節(jié)。,4.2 字符串,例如: String message = I Love Java!; String split = message.split( ); 上例中使用空格分割I(lǐng) Love Java!,分割之后,split數(shù)組包含三個元素,分別為:I、Love、Java!。 4.2.3

49、 StringBuffer類的主要方法 String和StringBuffer他們都可以存儲和操作字符串,即包含多個字符的字符串?dāng)?shù)據(jù)。String類是字符串常量,是不可更改的常量。而StringBuffer是字符串變量,它的對象是可以擴充和修改的。StringBuffer提供了很多如表4-2所示的功能強大的字符串操作方法,具體使用方法詳見JDK文檔。,4.2 字符串,表4-2 StringBuffer提供的主要方法,4.2 字符串,4.2 字符串,4.2 字符串,【例4-6】StringBuffer類的主要方法 源程序如下: public class Ex4_6_StringBuffer pu

50、blic static void main(String args) / TODO Auto-generated method stub System.out.println(-本程序輸出結(jié)果如下-); char c1, ch1 = new char13; String str1 = ; StringBuffer sbufstr1; boolean bFlag = true; sbufstr1 = new StringBuffer(NewStrBuffer); / 1.字符串緩沖區(qū)數(shù)據(jù)轉(zhuǎn)換為字符串 str1 = sbufstr1.toString();/ toString()方法完成轉(zhuǎn)換任務(wù)

51、str1 = str1 + :; System.out.println(sbufstr1); ch1 = str1.toCharArray(); System.out.println(ch1);,4.2 字符串,/ 2.追加字符 sbufstr1 = sbufstr1.append(bFlag); sbufstr1 = sbufstr1.append(3456); sbufstr1 = sbufstr1.append(12345678987654L); sbufstr1 = sbufstr1.append(3.14159F); sbufstr1 = sbufstr1.append(2.7171

52、7171); sbufstr1 = sbufstr1.append(中國); sbufstr1 = sbufstr1.append(new StringBuffer(解放軍); System.out.println(sbufstr1); / 3.插入字符 System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(6, ing);/ 得NewStringBuffer System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(sbufstr1.length(), :);/ 得NewStr

53、ingBuffer: System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(0, bFlag);/ 得trueNewStringBuffer:,4.2 字符串,System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(0, ch1, 6, 3);/ 得BuftrueNewStringBuffer: System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(0, 3456);/ 得3456BuftrueNewStringBuf

54、fer: System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(0, 12345678987654L); System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(0, 3.14159F); System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(0, 2.71); System.out.println(sbufstr1); sbufstr1 = sbufstr1.insert(0, new StringBuffer(解放

55、軍); sbufstr1 = sbufstr1.insert(0, 中國人民); System.out.println(sbufstr1);,4.2 字符串,/ 4.替換字符 str1 = You have a ; sbufstr1 = sbufstr1.replace(0, 6, str1); System.out.println(sbufstr1); / 5.刪除字符 sbufstr1.delete(3, 6); System.out.println(sbufstr1); sbufstr1.deleteCharAt(2); System.out.println(sbufstr1); / 6

56、.清空字符串 / sbufstr1.ensureCapacity(1); System.out.println(sbufstr1); sbufstr1.setLength(0); sbufstr1.append(中國人民解放軍); System.out.println(sbufstr1); / 7.取字符 c1 = sbufstr1.charAt(3); System.out.println(c1);,4.2 字符串,/ 8.取子串 str1 = sbufstr1.substring(3); System.out.println(str1); str1 = sbufstr1.substring

57、(3, 6); System.out.println(str1); / 9.字符串反轉(zhuǎn) sbufstr1.reverse(); System.out.println(sbufstr1); str1 = sbufstr1.toString(); System.out.println(str1); System.out.println(-本程序輸出已經(jīng)結(jié)束-); ,4.2 字符串,4.3正則表達式,程序開發(fā)過程中,難免會遇到需要匹配、查找、替換、判斷字符串的情況,正則表達式是解決這一問題的主要手段。正則表達式是一種字符串的語法規(guī)則,是一種可以用于模式匹配和替換的規(guī)則,主要用于文本和字符串處理。一個正則表達式是由普通的字符(例如字符a到z)以及特殊字符(元字符)組成的文字模式,用以描述在查找文字主體時待匹配的一個或多個字符串。例如,“dhello”中的d就是有特殊意義的元字符,代表0到9中的任何一個。字符串“9hello”和“1hello”

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論