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

下載本文檔

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

文檔簡(jiǎn)介

第四章 數(shù)組與字符串,信息類專業(yè)課程,西北農(nóng)林科技大學(xué),主要內(nèi)容,數(shù)組 數(shù)組的應(yīng)用 字符串String 可變字符序列StringBuffer 可變字符序列StringBuilder,4.1 數(shù)組,數(shù)組是相同類型的數(shù)據(jù)元素按順序組成的一種復(fù)合數(shù)據(jù)類型,元素在數(shù)組中的相對(duì)位置由下標(biāo)來指明。 例如:public static void main(String args) 其中args是String類型的數(shù)組 占用連續(xù)的內(nèi)存地址 數(shù)組的靜態(tài)性 一旦創(chuàng)建就不能修改數(shù)組的長(zhǎng)度,數(shù)組聲明,一維數(shù)組變量的聲明格式有如下兩種: (1)數(shù)組元素的數(shù)據(jù)類型 變量名; (2)數(shù)組元素的數(shù)據(jù)類型 變量名 ; 示例: int c; String names; int c ; String names ;,數(shù)組的實(shí)例化,Java數(shù)組實(shí)際上也是對(duì)象,所以可通過new 關(guān)鍵字來創(chuàng)建。 示例: int c; / 聲明,不必指定數(shù)組的大小 c = new int12; / 創(chuàng)建對(duì)象,并分配內(nèi)存 上面的兩個(gè)語句可以簡(jiǎn)化成一個(gè)語句: int c = new int12; 數(shù)組的長(zhǎng)度用數(shù)組名.length,如c.length 數(shù)組元素用數(shù)組名下表表示,下標(biāo)的范圍是0數(shù)組長(zhǎng)度1,如c0,初始化數(shù)組,基本數(shù)據(jù)類型的元素初始化為0值或false 非基本數(shù)據(jù)類型的元素初始化為null 可以采用循環(huán)結(jié)構(gòu)初始化數(shù)組 示例: double squares; squares = new double100; for (int i=0; i squares.length; i+) squaresi = i*i; ,通過初始化語句創(chuàng)建數(shù)組,Java語言允許通過數(shù)組的初始化語句創(chuàng)建數(shù)組 示例: int n = 10, 20, 30, 40, 50 ; 上面語句創(chuàng)建了一個(gè)含有五個(gè)元素的數(shù)組 下標(biāo)值分別為0, 1, 2, 3, 4 這時(shí)不需要運(yùn)算符new,數(shù)組的內(nèi)存分配示例,數(shù)組的注意事項(xiàng),當(dāng)通過循環(huán)遍歷數(shù)組時(shí) 下標(biāo)永遠(yuǎn)不要低于0 下標(biāo)永遠(yuǎn)要比數(shù)組元素個(gè)數(shù)小 當(dāng)數(shù)組下標(biāo)出錯(cuò),Java 產(chǎn)生 ArrayIndexOutOfBoundsException異常 數(shù)組一旦創(chuàng)建后,不能調(diào)整大小 可使用相同的引用變量來引用一個(gè)全新的數(shù)組 int a = new int6; a = new int10;,多維數(shù)組,最常用的多維數(shù)組是二維數(shù)組 int a = new int34; 二維數(shù)組可以理解成如下圖示的表格,行的下標(biāo)值,列的下標(biāo)值,二維數(shù)組的創(chuàng)建(內(nèi)存分配),(1)直接為每一維分配空間,如: int a = new int23; 該語句創(chuàng)建了一個(gè)二維數(shù)組a,其較高一維含兩個(gè)元素,每個(gè)元素為由3個(gè)整型數(shù)構(gòu)成的整型數(shù)組。 此時(shí)該數(shù)組的元素為: a00 a01 a02 a10 a11 a12,二維數(shù)組的創(chuàng)建(內(nèi)存分配),(2)從最高維開始,分別為每一維分配空間 二維數(shù)組的實(shí)際上是數(shù)組的數(shù)組,即創(chuàng)建以數(shù)組為元素的數(shù)組,意味著: 二維數(shù)組的每一行可以具有不同的列數(shù),如: int b = new int2 ; / 最高維含2個(gè)元素,每個(gè)元素為一個(gè)整型數(shù)組 b0 = new int3; b1 = new int5; 此時(shí)該數(shù)組的元素為: b00 b01 b02 b10 b11 b12 b13 b14,二維數(shù)組元素的初始化,(1)先創(chuàng)建二維數(shù)組,然后通過循環(huán)直接對(duì)每個(gè)元素進(jìn)行賦值,如: int matrix = new int45; for (int row=0; row matrix.length; row+) for (int col=0; col matrixrow.length; col+) matrixrowcol = row + col; 注:二維數(shù)組的長(zhǎng)度指的是二維數(shù)組的行數(shù),用數(shù)組名.length表示,某i行的數(shù)組長(zhǎng)度(該行的列數(shù))用數(shù)組名i.length表示,二維數(shù)組元素的初始化,(2)在聲明數(shù)組的同時(shí)進(jìn)行初始化。如: int a =2,3,1,5,3,4; 聲明了一個(gè)32的數(shù)組,并對(duì)每個(gè)元素賦值,即: a00 = 2 a01 = 3 a10 = 1 a11 = 5 a20 = 3 a21 = 4,例:構(gòu)造楊輝三角形,class Yanghui public static void main(String args) int yanghui =1,1,1,1,2,1,1,3,3,1, 1,4,6,4,1; for(int i=0;iyanghui.length;i+) for(int j=0;jyanghuii.length;j+) System.out.print(“t“+yanghuiij); System.out.println(); ,4.2數(shù)組的應(yīng)用,復(fù)制數(shù)組 數(shù)組的封裝類Arrays 數(shù)組用作參數(shù)和返回值 main方法的數(shù)組參數(shù)獲取命令行輸入,復(fù)制數(shù)組,Java在System類中提供了一個(gè)特殊的方法arraycopy(),用于實(shí)現(xiàn)數(shù)組之間的復(fù)制 public class ArrayCopy public static void main(String args) int i; int arr1=1,2,3,4,5,6,7,8,9,10; int arr2=new int10; /把a(bǔ)rr1中所有元素復(fù)制到arr2中,下標(biāo)從0開始 System.arraycopy(arr1,0,arr2,0,arr1.length); for(i=0;iarr2.length;i+) System.out.print(arr2i+“ “); System.out.println(); ,數(shù)組的封裝類Arrays,java.util包封裝了一個(gè)Arrays類,可實(shí)現(xiàn)數(shù)組操作的查找、復(fù)制和排序 binarySearch(int a, int fromIndex, int toIndex, int key) copyOf(int original, int newLength) copyOfRange(int original, int from, int to) sort(int a),例:數(shù)組元素排序,import java.util.Arrays; public class ArraySort public static void main(String args) int hold=10,1,8,3,6,5,4,7,2,9; Arrays.sort(hold); for(int i=0;ihold.length;i+) System.out.print(holdi+“ “); ,數(shù)組用作參數(shù)和返回值,數(shù)組可以作為參數(shù)傳遞給方法,也可以作為方法的返回值 在調(diào)用的方法中的數(shù)組對(duì)象與調(diào)用者中的是同一個(gè)。 如果在方法中修改了任何一個(gè)數(shù)組元素,因?yàn)檫@個(gè)數(shù)組與方法之外的數(shù)組對(duì)象是同一個(gè),所以方法之外的數(shù)組也將發(fā)生改變。,例:數(shù)組作為調(diào)用方法的傳遞參數(shù),public class CallArray static void updateArray (int arrays) arrays3=10; public static void main(String args) int hold=0,1,2,3,4,5,6,7,8,9; updateArray(hold); for(int i=0;ihold.length;i+) System.out.print(holdi+“ “); 運(yùn)行時(shí),hold數(shù)組的內(nèi)容如下: 0,1,2,10,4,5,6,7,8,9,例:數(shù)組作為方法的返回結(jié)果,public class ReturnArray static int updateArray(int arrays) for(int i=0;iarrays.length;i+) arraysi=i; return arrays; public static void main(String args) int hold=9,8,7,3,5,6,4,2,1,0; hold= updateArray(hold); for(int i=0;ihold.length;i+) System.out.println(“hold“+i+“=“+holdi); ,main方法的數(shù)組參數(shù)獲取命令行輸入,在Java程序的主方法public static void main (String args ) 中,args 是一個(gè)字符串?dāng)?shù)組,用來接收應(yīng)用程序被調(diào)用時(shí)由用戶直接從鍵盤輸?shù)膮?shù)。 例:應(yīng)用程序被調(diào)用時(shí)參數(shù)的傳遞 public class MyFriend public static void main (String arg) System.out.println(arg0+ “and“+ arg1 +“are my good friends! “); 程序經(jīng)編譯后,采用命令java MyFriend Tom Alice來執(zhí)行 程序運(yùn)行結(jié)果為: Tom and Alice are my good friends!,4.3 字符串String,在Java中字符串是對(duì)象,用String類來創(chuàng)建 在Java中對(duì)字符串的處理,需要事先創(chuàng)建一個(gè)String的實(shí)例,即像其它對(duì)象一樣,需要對(duì)String聲明和實(shí)例化, 如:,但我們也可以用簡(jiǎn)寫的形式,像基本數(shù)據(jù)類型一樣創(chuàng)建String ,如:,String對(duì)象,與C語言不同: 字符(char)數(shù)組不是字符串(String),String數(shù)值不必以u(píng)0000結(jié)束 String對(duì)象一旦被創(chuàng)建后就不能被改變,稱為非可變對(duì)象,String的構(gòu)造方法,String() String(byte bytes) String(byte bytes, Charset charset) String(byte bytes, int offset, int length) String(byte bytes, int offset, int length, Charset charset) String(byte bytes, int offset, int length, String charsetName) String(byte bytes, String charsetName) String(char value) String(char value, int offset, int count) String(int codePoints, int offset, int count) String(String original) String(StringBuffer buffer) String(StringBuilder builder),String對(duì)象的創(chuàng)建,String對(duì)象的內(nèi)存分配,John,Java,World,堆內(nèi)存,字符串池,JVM,String對(duì)象的內(nèi)存分配(續(xù)),John,Java,World,堆內(nèi)存,字符串池,hello,JVM,s1,s2,String對(duì)象的內(nèi)存分配(續(xù)),John,Java,World,堆內(nèi)存,字符串池,hello,JVM,hello,String,s3,hello,String,s4,s1,s2,String類的方法及應(yīng)用,字符串長(zhǎng)度 比較字符串 連接字符串 拷貝字符串 搜索字符 搜索子串 修改字符串 其他方法,字符串長(zhǎng)度,方法 length( ) 返回 String 的長(zhǎng)度 與數(shù)組不同之處: String不含有 length成員變量,對(duì) str3來說,沒有創(chuàng)建對(duì)象,內(nèi)容為null.所以無法確定其長(zhǎng)度,比較字符串,字符類型的數(shù)據(jù)也是數(shù)值類型數(shù)據(jù) 比較字符串大小,實(shí)際上就是依次比較其所包含的字符的數(shù)值大小 小寫字母與大小字母是不相同的 方法有: equals() equalsIgnoreCase() regionMatches() compareTo() compareToIgnoreCase(),equals()方法,boolean equals(Object anObject) 比較當(dāng)前的字符串與指定的對(duì)象 比較結(jié)果為真當(dāng)且僅當(dāng)給定的參數(shù)不為空,并且具有完全相同的字符序列,應(yīng)用1:String對(duì)象的比較,true false true true,(1),(2),方式(1)比方式(2)效率高,“=” 比較地址 “equals“ 比較內(nèi)容,equalsIgnoreCase()方法,boolean equalsIgnoreCase(String anotherString) 判別相等,但不區(qū)分大小寫 例如: 在不區(qū)分大小寫情況下, “hello”與“HELLO”相等,regionMatches()方法,regionMatches()方法實(shí)現(xiàn)子串匹配相等的比較,返回值為boolean類型。若相等則返回true,否則返回false 格式如下: boolean str1. regionMatches(boolean ignoreCase,int offset,String str2,int offset,int len) 參數(shù)說明: boolean ignoreCase 若為true,則忽略大小寫 int offset 確定str1的起始偏移量 String str2 str2為參與比較的另一個(gè)串 int offset 確定str2的起始偏移量 int len 確定子串長(zhǎng)度,compareTo() 與compareToIgnoreCase(),int compareTo(String anotherString) 比較兩個(gè)字符串的內(nèi)容 返回: 0 : 如果字符串內(nèi)容完全相同 小于0的值: 如果在比較第一個(gè)不相同字符,當(dāng)前字符串的字符的值小于anotherString對(duì)應(yīng)的字符的值 大于0的值: 如果在比較第一個(gè)不相同字符,當(dāng)前字符串的字符的值大于anotherString對(duì)應(yīng)的字符的值 int compareToIgnoreCase(String str) 比較兩個(gè)字符串的內(nèi)容,但不區(qū)分大小寫,連接字符串,“+”運(yùn)算符 concat(),拷貝字符串,copyValueOf() getChars() toCharArray() substring(),搜索字符,charAt(int index) indexOf(int ch) indexOf(int ch,int fromIndex) lastIndexOf(int ch) lastIndexOf(int ch,int fromIndex),搜索子串,indexOf(String str) indexOf(String str, int fromIndex) lastIndexOf(String str) lastIndexOf(String str, int fromIndex) 返回第一次找到的時(shí)下標(biāo),如果沒有找到,則返回-1,修改字符串,replace () toLowerCase() toUpperCase() trim (),String的其他方法,valueOf() 將參數(shù)的值轉(zhuǎn)化成相應(yīng)的字符串 replace() 替換字符串中的字符或字串 toUpperCase() toLowerCase() toCharArray( )將字符串轉(zhuǎn)換成字符數(shù)組 intern()返回具有相同內(nèi)容的字符串的引用,4.4 可變字符序列StringBuffer,StringBuffer類創(chuàng)建的串可以修改,可以對(duì)串的內(nèi)容進(jìn)行增、刪、改操作。 StringBuffer() 構(gòu)造一個(gè)其中不帶字符的字符串緩沖區(qū),初始容量為 16 個(gè)字符。 StringBuffer(int capacity) 構(gòu)造一個(gè)不帶字符,但具有指定初始容量的字符串緩沖區(qū)。 StringBuffer(String str) 構(gòu)造一個(gè)字符串緩沖區(qū),并將其內(nèi)容初始化為指定的字符串內(nèi)容,StringBuffer方法,public StringBuffer append(String str) public StringBuffer insert(int offset,String str) public StringBuffer delete(int start,int end) public StringBuffer deleteCharAt(int index) public StringBuffer replace(int start,int end,String str) public void setCharAt(int index,char ch) public StringBuffer reverse( ) public int length( ) public int capacity( ) public void setLength(int newLength),StringBuffer對(duì)象的內(nèi)存分配,堆內(nèi)存,JVM,初始容量為 16 個(gè)字符 長(zhǎng)度為0,容量為 16 個(gè)字符 長(zhǎng)度為5,容量為 16 個(gè)字符 長(zhǎng)度為11,StringBuffer對(duì)象的內(nèi)存分配(續(xù)),新數(shù)組長(zhǎng)度(新容量)=原容量22,編譯后的字節(jié)碼等同于以下源碼:,應(yīng)用:連接字符串操作(1),運(yùn)行期連接字符串操作,方式(2)比方式(1)效率高,(1),(2),編譯后的字節(jié)碼等同于以下源碼:,應(yīng)用:連接字符串操作(2),編譯期連接字符串操作,方式(1)比方式(2)效率高,(1),(2),在編譯期能確定字符串值時(shí),采用 String s=“”;形式來定義,使用“+”為字符串連接的性能最佳 經(jīng)常改變字符串的操作或在運(yùn)行期才能確定字符串時(shí),采用StringBuffer,如何選用String和StringBuffer?,盡量不要用new創(chuàng)建String對(duì)象 避免使用 “ =” 來重新構(gòu)造String對(duì)象 在聲明StringBuffer對(duì)象時(shí),指定合適的容量,如StringBuffer sb=new StringBuffer(1024);,使用String和StringBuffer注意事項(xiàng),可變字符序列StringBuilder,StringBuilder是JDK1.5版本以后出來的 它是作為一個(gè)可變的字符序列。此類提供一個(gè)與 StringBuffer 兼容的 API,但不保證同步。 該類被設(shè)計(jì)用作 StringBuffer 的一個(gè)簡(jiǎn)易替換,用在字符串緩沖區(qū)被單個(gè)線程使用的時(shí)候 如果可能,建議優(yōu)先采用該類,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中,它比 StringBuffer 要快。,思考:編寫程序測(cè)試以下三種代碼方式的效率高低?,(1),(2),(3),練習(xí)題,關(guān)于以下程序段,正確的說法是 1 String s1=“Hello“; 2 String s2=“Hello“; 3 if(s1= =s2) 4 System.out.println(“s1= =s2“); 5 if (s1.equals(s2) 6 System.out.println(“s1.equals(s2) “); A. 行4與行6都將執(zhí)行 B. 行4執(zhí)行,行6不執(zhí)行 C. 行6執(zhí)行,行4不執(zhí)行 D. 行4、行6都不執(zhí)行,String s2=new String(“Hello“);,答案:A,修改后答案:C,練習(xí)題:閱讀下面的程序,輸出結(jié)果是什么?,class TestString public void stringReplace (String text) text = text.replace(j , i); text=text+“C“; public void bufferReplace (StringBuffer text) text.setCharAt(0,i); text = text.append(“C“); public void change(char ch) ch0= Y;

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論