




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、第四章 數(shù)組與字符串,信息類專業(yè)課程,西北農(nóng)林科技大學,主要內(nèi)容,數(shù)組 數(shù)組的應用 字符串String 可變字符序列StringBuffer 可變字符序列StringBuilder,4.1 數(shù)組,數(shù)組是相同類型的數(shù)據(jù)元素按順序組成的一種復合數(shù)據(jù)類型,元素在數(shù)組中的相對位置由下標來指明。 例如:public static void main(String args) 其中args是String類型的數(shù)組 占用連續(xù)的內(nèi)存地址 數(shù)組的靜態(tài)性 一旦創(chuàng)建就不能修改數(shù)組的長度,數(shù)組聲明,一維數(shù)組變量的聲明格式有如下兩種: (1)數(shù)組元素的數(shù)據(jù)類型 變量名; (2)數(shù)組元素的數(shù)據(jù)類型 變量名 ; 示例: i
2、nt c; String names; int c ; String names,數(shù)組的實例化,Java數(shù)組實際上也是對象,所以可通過new 關鍵字來創(chuàng)建。 示例: int c; / 聲明,不必指定數(shù)組的大小 c = new int12; / 創(chuàng)建對象,并分配內(nèi)存 上面的兩個語句可以簡化成一個語句: int c = new int12; 數(shù)組的長度用數(shù)組名.length,如c.length 數(shù)組元素用數(shù)組名下表表示,下標的范圍是0數(shù)組長度1,如c0,初始化數(shù)組,基本數(shù)據(jù)類型的元素初始化為0值或false 非基本數(shù)據(jù)類型的元素初始化為null 可以采用循環(huán)結(jié)構(gòu)初始化數(shù)組 示例: double s
3、quares; 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)建了一個含有五個元素的數(shù)組 下標值分別為0, 1, 2, 3, 4 這時不需要運算符new,數(shù)組的內(nèi)存分配示例,數(shù)組的注意事項,當通過循環(huán)遍歷數(shù)組時 下標永遠不要低于0 下標永遠要比數(shù)組元素個數(shù)小 當數(shù)組下標出錯,Java 產(chǎn)生 ArrayIndexOutOfBoundsExcept
4、ion異常 數(shù)組一旦創(chuàng)建后,不能調(diào)整大小 可使用相同的引用變量來引用一個全新的數(shù)組 int a = new int6; a = new int10,多維數(shù)組,最常用的多維數(shù)組是二維數(shù)組 int a = new int34; 二維數(shù)組可以理解成如下圖示的表格,行的下標值,列的下標值,二維數(shù)組的創(chuàng)建(內(nèi)存分配,1)直接為每一維分配空間,如: int a = new int23; 該語句創(chuàng)建了一個二維數(shù)組a,其較高一維含兩個元素,每個元素為由3個整型數(shù)構(gòu)成的整型數(shù)組。 此時該數(shù)組的元素為: a00 a01 a02 a10 a11 a12,二維數(shù)組的創(chuàng)建(內(nèi)存分配,2)從最高維開始,分別為每一維分配空
5、間 二維數(shù)組的實際上是數(shù)組的數(shù)組,即創(chuàng)建以數(shù)組為元素的數(shù)組,意味著: 二維數(shù)組的每一行可以具有不同的列數(shù),如: int b = new int2 ; / 最高維含2個元素,每個元素為一個整型數(shù)組 b0 = new int3; b1 = new int5; 此時該數(shù)組的元素為: b00 b01 b02 b10 b11 b12 b13 b14,二維數(shù)組元素的初始化,1)先創(chuàng)建二維數(shù)組,然后通過循環(huán)直接對每個元素進行賦值,如: int matrix = new int45; for (int row=0; row matrix.length; row+) for (int col=0; col ma
6、trixrow.length; col+) matrixrowcol = row + col; 注:二維數(shù)組的長度指的是二維數(shù)組的行數(shù),用數(shù)組名.length表示,某i行的數(shù)組長度(該行的列數(shù))用數(shù)組名i.length表示,二維數(shù)組元素的初始化,2)在聲明數(shù)組的同時進行初始化。如: int a =2,3,1,5,3,4; 聲明了一個32的數(shù)組,并對每個元素賦值,即: a00 = 2 a01 = 3 a10 = 1 a11 = 5 a20 = 3 a21 = 4,例:構(gòu)造楊輝三角形,class Yanghui public static void main(String args) int ya
7、nghui =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ù)組的應用,復制數(shù)組 數(shù)組的封裝類Arrays 數(shù)組用作參數(shù)和返回值 main方法的數(shù)組參數(shù)獲取命令行輸入,復制數(shù)組,Java在System類中提供了一個特殊的方法arraycopy(),用于實現(xiàn)數(shù)組之間的復制 public class ArrayCopy public stat
8、ic void main(String args) int i; int arr1=1,2,3,4,5,6,7,8,9,10; int arr2=new int10; /把arr1中所有元素復制到arr2中,下標從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包封裝了一個Arrays類,可實現(xiàn)數(shù)組操作的查找、復制和排序 binarySearch(inta
9、, intfromIndex, inttoIndex, intkey) copyOf(intoriginal, intnewLength) copyOfRange(intoriginal, intfrom, intto) sort(inta,例:數(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
10、.out.print(holdi+ );,數(shù)組用作參數(shù)和返回值,數(shù)組可以作為參數(shù)傳遞給方法,也可以作為方法的返回值 在調(diào)用的方法中的數(shù)組對象與調(diào)用者中的是同一個。 如果在方法中修改了任何一個數(shù)組元素,因為這個數(shù)組與方法之外的數(shù)組對象是同一個,所以方法之外的數(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; updateAr
11、ray(hold); for(int i=0;ihold.length;i+) System.out.print(holdi+ ); 運行時,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,
12、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 是一個字符串數(shù)組,用來接收應用程序被調(diào)用時由用戶直接從鍵盤輸?shù)膮?shù)。 例:應用程序被調(diào)用時參數(shù)的傳遞 public class MyFriend public static void main (String arg) System.out.println(ar
13、g0+ and+ arg1 +are my good friends! ); 程序經(jīng)編譯后,采用命令java MyFriend Tom Alice來執(zhí)行 程序運行結(jié)果為: Tom and Alice are my good friends,4.3 字符串String,在Java中字符串是對象,用String類來創(chuàng)建 在Java中對字符串的處理,需要事先創(chuàng)建一個String的實例,即像其它對象一樣,需要對String聲明和實例化, 如,但我們也可以用簡寫的形式,像基本數(shù)據(jù)類型一樣創(chuàng)建String ,如,String對象,與C語言不同: 字符(char)數(shù)組不是字符串(String),String
14、數(shù)值不必以u0000結(jié)束 String對象一旦被創(chuàng)建后就不能被改變,稱為非可變對象,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 byte
15、s, 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對象的創(chuàng)建,String對象的內(nèi)存分配,John,Java,World,堆內(nèi)存,字符串池,JVM,String對象的內(nèi)存分配(續(xù),John,Java,World,堆內(nèi)
16、存,字符串池,hello,JVM,s1,s2,String對象的內(nèi)存分配(續(xù),John,Java,World,堆內(nèi)存,字符串池,hello,JVM,hello,String,s3,hello,String,s4,s1,s2,String類的方法及應用,字符串長度 比較字符串 連接字符串 拷貝字符串 搜索字符 搜索子串 修改字符串 其他方法,字符串長度,方法 length( ) 返回 String 的長度 與數(shù)組不同之處: String不含有 length成員變量,對 str3來說,沒有創(chuàng)建對象,內(nèi)容為null.所以無法確定其長度,比較字符串,字符類型的數(shù)據(jù)也是數(shù)值類型數(shù)據(jù) 比較字符串大小,實際
17、上就是依次比較其所包含的字符的數(shù)值大小 小寫字母與大小字母是不相同的 方法有: equals() equalsIgnoreCase() regionMatches() compareTo() compareToIgnoreCase(,equals()方法,boolean equals(Object anObject) 比較當前的字符串與指定的對象 比較結(jié)果為真當且僅當給定的參數(shù)不為空,并且具有完全相同的字符序列,應用1:String對象的比較,true false true true,1,2,方式(1)比方式(2)效率高,” 比較地址 equals 比較內(nèi)容,equalsIgnoreCase(
18、)方法,boolean equalsIgnoreCase(String anotherString) 判別相等,但不區(qū)分大小寫 例如: 在不區(qū)分大小寫情況下, “hello”與“HELLO”相等,regionMatches()方法,regionMatches()方法實現(xiàn)子串匹配相等的比較,返回值為boolean類型。若相等則返回true,否則返回false 格式如下: boolean str1. regionMatches(boolean ignoreCase,int offset,String str2,int offset,int len) 參數(shù)說明: boolean ignoreCase
19、 若為true,則忽略大小寫 int offset 確定str1的起始偏移量 String str2 str2為參與比較的另一個串 int offset 確定str2的起始偏移量 int len 確定子串長度,compareTo() 與compareToIgnoreCase(,int compareTo(String anotherString) 比較兩個字符串的內(nèi)容 返回: 0 : 如果字符串內(nèi)容完全相同 小于0的值: 如果在比較第一個不相同字符,當前字符串的字符的值小于anotherString對應的字符的值 大于0的值: 如果在比較第一個不相同字符,當前字符串的字符的值大于another
20、String對應的字符的值 int compareToIgnoreCase(String str) 比較兩個字符串的內(nèi)容,但不區(qū)分大小寫,連接字符串,”運算符 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(S
21、tring str, int fromIndex) lastIndexOf(String str) lastIndexOf(String str, int fromIndex) 返回第一次找到的時下標,如果沒有找到,則返回-1,修改字符串,replace () toLowerCase() toUpperCase() trim (,String的其他方法,valueOf() 將參數(shù)的值轉(zhuǎn)化成相應的字符串 replace() 替換字符串中的字符或字串 toUpperCase() toLowerCase() toCharArray( )將字符串轉(zhuǎn)換成字符數(shù)組 intern()返回具有相同內(nèi)容的字符串
22、的引用,4.4 可變字符序列StringBuffer,StringBuffer類創(chuàng)建的串可以修改,可以對串的內(nèi)容進行增、刪、改操作。 StringBuffer() 構(gòu)造一個其中不帶字符的字符串緩沖區(qū),初始容量為 16 個字符。 StringBuffer(intcapacity) 構(gòu)造一個不帶字符,但具有指定初始容量的字符串緩沖區(qū)。 StringBuffer(Stringstr) 構(gòu)造一個字符串緩沖區(qū),并將其內(nèi)容初始化為指定的字符串內(nèi)容,StringBuffer方法,public StringBuffer append(String str) public StringBuffer insert
23、(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
24、setLength(int newLength,StringBuffer對象的內(nèi)存分配,堆內(nèi)存,JVM,初始容量為 16 個字符 長度為0,容量為 16 個字符 長度為5,容量為 16 個字符 長度為11,StringBuffer對象的內(nèi)存分配(續(xù),新數(shù)組長度(新容量)=原容量22,編譯后的字節(jié)碼等同于以下源碼,應用:連接字符串操作(1,運行期連接字符串操作,方式(2)比方式(1)效率高,1,2,編譯后的字節(jié)碼等同于以下源碼,應用:連接字符串操作(2,編譯期連接字符串操作,方式(1)比方式(2)效率高,1,2,在編譯期能確定字符串值時,采用 String s=“”;形式來定義,使用“+”為字符
25、串連接的性能最佳 經(jīng)常改變字符串的操作或在運行期才能確定字符串時,采用StringBuffer,如何選用String和StringBuffer,盡量不要用new創(chuàng)建String對象 避免使用 “ =” 來重新構(gòu)造String對象 在聲明StringBuffer對象時,指定合適的容量,如StringBuffer sb=new StringBuffer(1024,使用String和StringBuffer注意事項,可變字符序列StringBuilder,StringBuilder是JDK1.5版本以后出來的 它是作為一個可變的字符序列。此類提供一個與 StringBuffer 兼容的 API,但不
26、保證同步。 該類被設計用作 StringBuffer 的一個簡易替換,用在字符串緩沖區(qū)被單個線程使用的時候 如果可能,建議優(yōu)先采用該類,因為在大多數(shù)實現(xiàn)中,它比 StringBuffer 要快,思考:編寫程序測試以下三種代碼方式的效率高低,1,2,3,練習題,關于以下程序段,正確的說法是 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,練習題:閱讀下面的程序,輸出結(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.a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機化學原料的環(huán)保合成方法優(yōu)化研究進展分析預測考核試卷
- 機器人服務創(chuàng)新模式與實踐案例考核試卷
- 景區(qū)旅游信息化平臺運營與管理考核試卷
- 制作氣球培訓課件
- 家電公司轉(zhuǎn)讓合同范本
- 委托汽車融資合同范本
- 正規(guī)吊車租賃合同范本
- 圍墻制作安裝合同范本
- 項目建設策劃合同范本
- 酒店餐飲服務流程優(yōu)化與提升制度
- 施工圖紙接收及分發(fā)臺賬
- 物流系統(tǒng)建模與仿真課件
- 小??Х仍耘嗉夹g(shù)措施課件
- 運輸企業(yè)消防應急救援預案
- 高邊坡掛網(wǎng)錨噴支護專項施工方案
- 10KV系統(tǒng)短路電流整定計算表格
- 初中英語 滬教牛津版 8B U1-4 More Practice Success for Spring Buds 課件
- 壓水堆核電廠在役檢查課件
- 前房角鏡檢查法及其在眼科的應用教學課件
- 2017年度項目生產(chǎn)部工作計劃推進表甘特圖
- 地下室車庫綜合管線施工布置
評論
0/150
提交評論