




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
Java程序設計(第二版)楊厚群主編第3章
字符串和數(shù)組本章介紹Java處理字符串和數(shù)組。字符串由一系列字符組成,這些字符可視為一個單元。本章將詳細討論java.lang包中的String類、StringBuffer類和java.util包中StringTokenizer類的功能。數(shù)組是相同類型的相關數(shù)據(jù)項組成的數(shù)據(jù)結(jié)構(gòu),本章主要討論一維數(shù)組和多維數(shù)組的使用。本章要點:熟練處理字符串;掌握數(shù)組的定義、創(chuàng)建及使用。3.1字符串前面介紹的,但由于單個字符char類型所蘊含的信息太少,不適合大量信息處理,當把一個個字符組合在一起時,就可以包括更多新的含義,這就形成新的數(shù)據(jù)類型——字符串。字符串一直是程序設計的主要內(nèi)容,也是容易出現(xiàn)錯誤的地方。這里介紹java語言所提供的3種常用字符串類:String類(字符串類);StringBuffer類(字符串緩沖器);StringTokenizer類(詞法分析器類)。3.1字符串3.1.1String類在前面的學習中,我們已經(jīng)用過字符串,如println(Strings)方法中的參數(shù)。該方法的功能是通過Java解釋器將要輸出的內(nèi)容轉(zhuǎn)化成一個String對象,再把它傳給println方法輸出。Java語言使用java.lang.String類處理字符串。(1)構(gòu)造一個字符串字符串常量是用雙引號括住的一串字符。如“welcometojava!”。要創(chuàng)建一個字符串,需要用到下面的語法:String字符串變量名=newString(字符串常量);另外Java還提供了一個簡單的創(chuàng)建字符串的簡單語法:String字符串變量名=字符串常量。3.1字符串(2).常用方法返回字符串長度的方法:publicintlength()返回指定位置字符的方法:publiccharcharAt(intindex)把字符串中指定內(nèi)容拷貝到字符數(shù)組的方法:publicvoidgetChars(intsrcBegin,intsrcEnd,char[]dst,intdstBegin)比較兩個字符串是否相等的方法:publicbooleanequals(ObjectanObject)3.1字符串(2).常用方法比較兩個字符串在不區(qū)分大小寫時是否相等的方法:publicbooleanequalsIgnoreCase(ObjectanObject)比較兩個字符串大小的方法:publicintcompareTo(ObjectanObject)檢查在指定范圍內(nèi)是否有指定前綴內(nèi)容的方法:publicStringstartWith(Stringpre,inttoffset)連接兩個字符串的方法:publicStringconcat(Stringstr)3.1字符串(2).常用方法返回指定字符和指定字符串在字符串中第一次出現(xiàn)的位置值的方法:publicStringindexOf(charch)publicStringindexOf(Stringstr)在字符串中使用指定字符進行替換的方法:publicStringreplace(charoldchar,charnewChar)取子串的方法:publicStringsubstring(intstart,intend)把字符串中字符轉(zhuǎn)換為大小寫的方法:publicStringtoUpperCase()publicStringtoLowerCase()3.1字符串3.1.2StringBuffer類字符串一旦創(chuàng)建,它的值就固定了,但在實際應用中,經(jīng)常需要對字符串的內(nèi)容做動態(tài)的修改,java語言中String類的替代品StingBuffer類(字符串緩沖器類型)可以實現(xiàn)該操作。StingBuffer類比String類更靈活,可以在字符串緩沖區(qū)中添加、插入、追加新內(nèi)容。(1)構(gòu)造一個字符緩沖區(qū)StringBuffer();/*分配16個字符的緩沖區(qū)*/StringBuffer(intlen);/*分配len個字符的緩沖區(qū)*/StringBuffer(Strings);/*除了按照s的大小分配空間外,再分配16個字符的緩沖區(qū)*/3.1字符串3.1.2StringBuffer類(1)常用方法獲得字符串長度的方法:publicintlength()重新設置字符串長度的方法:publicvoidsetLength(intnewLength)返回當前緩沖區(qū)容量的方法publicintcapacity()在字符串添加新內(nèi)容的方法:publicStringBufferappend(Stringstr)3.1字符串3.1.2StringBuffer類(1)常用方法刪除字符串指定內(nèi)容的方法:publicStringBufferdelet(intstart,intend)使用字符串替換指定內(nèi)容的方法:publicStringBufferreplace(intstart,intend,Stringstr)在指定位置插入字符串的方法:publicStringBufferinsert(intoffset,Stringstr)反轉(zhuǎn)字符串內(nèi)容的方法:publicStringBufferreverse();3.1字符串3.1.3StringTokenizer類java.util.StringTokenizer類可以將一個串分成小片,以便提取和處理其中的信息。如果想得到一個串的全部單詞,比如該串為”IamlearningJavanow”,可以為它創(chuàng)建一個StringTokenizer類的實例,然后用StringTokenizer類中的方法提取單個單詞。(1)構(gòu)造字符串詞法分析器publicStringTokenizer(Stringstr);/*構(gòu)造一個字符串且采用默認分隔符的詞法分析器*/publicStringTokenizer(Stringstr,Stringdelim);/*構(gòu)造一個指定字符串和分隔符的詞法分析器*/publicStringTokenizer(Stringstr,Stringdelim,booleanreturnDelims);/*構(gòu)造一個指定字符串和分隔符且返回分隔符的詞法分析器*/3.1字符串3.1.3StringTokenizer類(2)常用方法測試是否還有分析出來的單詞:publicbooleanhasMoreTokens();返回下一個單詞:publicStringnextToken();返回分析出來的單詞個數(shù)publicintcountTokens();StringTokenizer對象時,可以指定一套定界符號識別每一個單詞。定界符把串分成為令牌的小片。3.1字符串3.1.4Character類Character類是對單個字符進行操作。
publicCharacter(char)//以造一個Character對象。2.常用方法publicStringtoString(),當前Character對象轉(zhuǎn)換成字符串。publicintcompareTo(CharacteranotherCharacter),當前Character對象與anotherCharacter比較。相等關系返回0;小于關系返回負數(shù);大于關系返回正數(shù)。
publicstaticbooleanisUpperCase(charc)或isLowerCase(charc),判斷字符c是否為大寫字母或小寫字母
publicstaticBooleanisLetter(charch)判斷字符ch是否為字母3.2數(shù)組當我們需要存儲一組數(shù)據(jù)時,由于為每一個數(shù)據(jù)聲明一個變量來存放是不可能的。因此,我們需要一個更高效組織數(shù)據(jù)的方法,這就是將要介紹的數(shù)組。數(shù)組是一種最簡單的復合數(shù)據(jù)類型,是多個相同數(shù)據(jù)類型數(shù)據(jù)的組合,它的出現(xiàn)實現(xiàn)了對這些相同數(shù)據(jù)的統(tǒng)一管理。Java將數(shù)組作為對象處理,有一維數(shù)組和多維數(shù)組之分。3.2數(shù)組3.2.1一維數(shù)組1.一維數(shù)組的聲明<數(shù)據(jù)類型><數(shù)組名稱>[];<數(shù)據(jù)類型>[]<數(shù)組名稱>;其中,這里數(shù)據(jù)類型可以是基本數(shù)據(jù)類型,也可以是以后我們將要學到的對象數(shù)據(jù)類型。數(shù)組名是一個標識符,“[]”指明了該變量是一個數(shù)組類型變量。3.2數(shù)組3.2.1一維數(shù)組2.一維數(shù)組的創(chuàng)建和初始化創(chuàng)建數(shù)組指的是在聲明數(shù)組之后為數(shù)組分配存儲空間,同時對數(shù)組中的元素執(zhí)行初始化。因為定義一維數(shù)組后,在沒有初始化之前,數(shù)組是不能被引用的,所以在使用數(shù)組之前必須進行初始化。初始化的方式有兩種:靜態(tài)方式:<數(shù)據(jù)類型><數(shù)組名稱>[]={<數(shù)組元素列表>};動態(tài)方式:<數(shù)據(jù)類型>[]<數(shù)組名稱>=new<數(shù)據(jù)類型>[<數(shù)組大小>];。3.2數(shù)組3.2.1一維數(shù)組3.對數(shù)組的操作(1)對數(shù)組元素的引用數(shù)組創(chuàng)建后就可以直接引用了,一般情況下只能對數(shù)組元素逐個引用而不能一次引用整個數(shù)組。在程序中使用數(shù)組元素和使用同類型的普通變量一樣,格式如下:<數(shù)組名稱>[下標]其中,下標是非負的整型常數(shù)或表達式。數(shù)組的下標從0開始編號,直到數(shù)組的最后一個元素,即數(shù)組的長度減1。如:intsum[]=newint[3];定義了數(shù)組sum有3個元素,它們分別為:sum[0],sum[1],sum[2]。3.2數(shù)組3.2.1一維數(shù)組(2)數(shù)組的長度每個數(shù)組都有一個屬性length指明它的長度(可以容納元素的個數(shù)),如:intArray.length指明數(shù)組intArray的長度。java運行時系統(tǒng)時,會對數(shù)組下標進行越界檢查,因此下標值必須在指定的范圍內(nèi):0~intArray.length。,數(shù)組的最大下標值為length-1,以保證安全性;如有越界將產(chǎn)生下標越界(ArrayIndexOutOfBoundexception)的編譯錯誤。另外java中的數(shù)組一旦創(chuàng)建,大小就不可以改變了。但是,可以為數(shù)組重新分配空間,這樣原來數(shù)組元素的值將被清除。它還是獨立的類,有自身的方法和屬性。
3.2數(shù)組3.2.1一維數(shù)組(3)數(shù)組的復制在Java中,在兩個數(shù)組間使用賦值語句(=),例如:newArray=array;這兩個數(shù)組名指向的都是同一數(shù)組,改變newArray數(shù)組元素的值,array數(shù)組元素的值也會隨之改變。因為數(shù)組名存放的是一個引用地址(為數(shù)組分配的存儲空間的首地址),是一個地址常量。如果把數(shù)組名賦值給另一個數(shù)組名時,傳送的是地址,這樣兩個數(shù)組名指向同一個地址,實際上是給同一個數(shù)組取兩個名字。如果改變其中一個數(shù)組的內(nèi)容,另一個也會改變。
3.2數(shù)組實現(xiàn)數(shù)組復制有下面三種方法:用循環(huán)語句復制數(shù)組的每個元素,如:for(inti-0;i<intArray.length;i++)targetArray[i]=intArray[i];使用Object類的clone方法,如:int[]targetArray=(int[])intArray.clone();使用System類中的靜態(tài)方法arrycopy:System.arraycopy(sourceArray,offset1,targetArray,offset2,number)其中,sourceArray和targetArray是源數(shù)組和目標數(shù)組名,它們必須是已經(jīng)初始化的數(shù)組。Offset1和offset2分別是源數(shù)組和目標數(shù)組操作的起始下標,number表示要復制的元素的個數(shù)。3.2數(shù)組3.2.2多維數(shù)組
前面,我們已經(jīng)學會了如何使用一維數(shù)組。但如果需要表示更復雜的數(shù)據(jù),如矩陣或表格,因此我們需要使用二維數(shù)組了。在java語言中,沒有真正的多維數(shù)組,多維數(shù)組被看成是“數(shù)組的數(shù)組”。1.二維數(shù)組的聲明<數(shù)據(jù)類型><數(shù)組名稱>[][];<數(shù)據(jù)類型>[][]<數(shù)組名稱>;
與一維數(shù)組一樣,聲明數(shù)組時,系統(tǒng)并沒有為數(shù)組分配存儲空間,因此不能指定各維的長度。用new關鍵字來創(chuàng)建數(shù)組后,系統(tǒng)才為數(shù)組分配存儲空間。3.2數(shù)組3.2.2多維數(shù)組2.二維數(shù)組的創(chuàng)建
直接為每一維分配空間:如:chara[][]=newchar[3][2];java首先把數(shù)組a看做是一維的字符型數(shù)組,一維數(shù)組a有3個(行標)元素,每個元素的值又是一個一維數(shù)組,每一個這樣的一維數(shù)組又分別都有2個(列標)元素。
從最高維開始分別為每一維分配空間:如:chara[][]=newchar[3][];//最高維表明數(shù)組是一個含3個元素的一維數(shù)組3.2數(shù)組3.2.2多維數(shù)組2.二維數(shù)組的初始化與引用對二維數(shù)組中的初始化有兩種方法:直接為每個元素賦值:inta[][]=newint[2][2];a[0][0]=1;a[0][1]=2;a[1][0]=3;a[1][1]=4;在聲明的同時進行初始化:inta[][]={{1,2},{3,4}};對二維數(shù)組的引用,其引用方式為:數(shù)組名[下標1][下標2];其中,下標1、下標2為非負的整型常數(shù)或表達式。下標取值都從0開始。3.3排序排序是將一組數(shù)據(jù)依照一定得順序排列起來。最常見的排序是“從小到大”遞增排序和“從大到小”遞減排序。在JAVA中在運用數(shù)組進行排序功能時,常用的排序算法有:選擇排序法、插入排序法、冒泡法。3.3排序3.3.1選擇排序
算法思想:首先從數(shù)組中選擇出最大值(或最小值)放在第一個(或最后一個)位置,然后再從數(shù)組里剩下的元素里選擇出最大值(或最小值)放在第二個(或倒數(shù)第二)位置,最后以此類推,直到剩下一個數(shù)為止。3.3.1選擇排序for(int
i=0;i<arr.length-1;i++){min=i;for(intj=i+1;j<arr.length;j++){if(arr[min]>arr[j]) min=j;}if(min!=i){ temp=arr[min];
arr[min]=arr[i];
arr[i]=temp;}}3.3排序3.3.2插入排序算法思想:先將無序序列中的第一個值去除作為關鍵值,然后將其放入有序序列(即作為新序列的第一個值),然后取第二個值作為關鍵值,將關鍵值放入有序序列,并與第一個值進行比較,若小于第一個值,則將這個關鍵值插入到第一個值前面(交換),后面依次取值然后和前面的有序序列中的值進行比較,插入到合適位置。3.3.2插入排序publicstaticvoidsort(Comparable[]data){ intlen=data.length; for(inti=1;i<len;i++){ ComparablecurrentData=data[i]; inttemp=i; while(temp>0&&data[temp-1].compareTo(currentData)>0){ data[temp]=data[temp-1]; temp--; } data[temp]=currentData; }}3.3排序3.3.3冒泡排序算法思想:n個數(shù),將第一個和第二個進行比較,將大的放在第二個位置,再將第二個和第三比較,大的放在第三個位置,依次向后比較,比較n-1次,將最大的放在最后(n的位置),然后再從第一個開始比較,比較n-2次,這次把最大的放到第n-1個位置,然后再來回比較.遵循第i次遍歷就從第一個數(shù)開始比較n-i次,將最后的值放在第n-i+1的位置3.3.3冒泡排序publicstaticvoidsort(Comparable[]data){ intlen=data.length; for(inti=0;i<len-1;i++){ Comparabletemp=null; booleanisExchanged=false; for(intj=len-1;j>i;j--){ if(data[j].compareTo(data[j-1])<0){ temp=data[j]; data[j]=data[j-1]; data[j-1]=temp; isExchanged=true; }//endif }//endfor //本趟排序未發(fā)生交換,提前終止算法,提高效率
if(!isExchanged){ break; } }}3.4查找查找是利用給出的關鍵值,在一個數(shù)據(jù)集合或數(shù)據(jù)序列中找出符合關鍵值的一個或一組數(shù)據(jù)的過程。由于查找需要處理大量的數(shù)據(jù),所以查找過程可能會占用較多的系統(tǒng)時間和內(nèi)存,為了提高查找操作的效率,需要精心設計查找算法來降低執(zhí)行查找操作的時間和空間代價。較為常用的查找算法有線性查找、二分查找等。3.4查找3.4.1線性查找線性查找也叫順序查找,是最簡單,也是最原始的查找算法。算法的思想是:從要查找的數(shù)列的
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物理-福建省龍巖市2025年高中畢業(yè)班三月教學質(zhì)量檢測(龍巖一檢)試題和答案
- (三檢)漳州市2025屆高三畢業(yè)班第三次教學質(zhì)量檢測 地理試卷(含答案)
- 江蘇財稅知識培訓課件
- 黑龍江省雙鴨山市2023-2024學年高一政治下學期開學考試含解析
- 鄒平基坑施工方案
- 2025年新高考地理全真模擬試卷1(含答案解析)
- 人造草坪合同范本
- 涼皮店轉(zhuǎn)讓合同范例
- 信陽小區(qū)購房合同范例
- 辦公空調(diào)維修 合同范例
- 2025安徽振含控股集團有限公司招聘8人筆試參考題庫附帶答案詳解
- 2025年內(nèi)蒙古機電職業(yè)技術學院單招職業(yè)技能測試題庫及答案一套
- 河道洪水應急響應預案
- 《欣賞與設計》(教案)2024-2025學年數(shù)學六年級下冊 北師大版
- 2025年中國煙氣檢測儀器行業(yè)市場運行態(tài)勢、進出口貿(mào)易及發(fā)展趨勢預測報告
- 減免保證金申請書
- 五年級下冊語文第三單元遨游漢字王國單元整體教學設計
- 工業(yè)級3D打印市場潛力-深度研究
- 某縣電子政務信息化服務平臺項目可行性研究報告管理資料
- 加油站的充電樁建設與運營
- 2024-2025學年江蘇省南京建鄴區(qū)新城中學七年級(上)期末數(shù)學試卷(含答案)
評論
0/150
提交評論