Java程序設計基礎 課件 第5章 數組、字符串_第1頁
Java程序設計基礎 課件 第5章 數組、字符串_第2頁
Java程序設計基礎 課件 第5章 數組、字符串_第3頁
Java程序設計基礎 課件 第5章 數組、字符串_第4頁
Java程序設計基礎 課件 第5章 數組、字符串_第5頁
已閱讀5頁,還剩130頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章數組、字符串1教學目標(1) 理解數組引入的必要性及其概念。(2) 掌握一維數組的聲明、創建、初始化及訪問。(3) 理解何時使用foreach訪問數組,能使用foreach訪問一維數組。(4) 能熟練應用一維數組的常用處理操作:使用輸入值初始化數組、使用隨機值初始化數組、對所有元素求和、找出最大(小)值及對應下標、隨機打亂、向左(或右)移動元素、輸出數組元素等。(5) 理解一維數組作為方法參數、方法返回值,能編寫數組作為參數、作為返回值的方法。(6) 基于一維數組,掌握線性查找算法與折半查找算法。(7) 基于一維數組,理解并掌握冒泡排序算法。(8) 掌握Arrays的常用方法,能應用這些常用方法,簡化編程。(9) 掌握一維數組復制的幾種方式,根據需要選擇合適的數組復制方式。(10)理解二維數組與一維數組的關系,掌握二維數組聲明、創建、初始化及訪問。(11) 理解鋸齒二維數組。2教學目標(12) 能熟練應用二維數組的常用處理操作:初始化數組、輸出所有數組元素、按列求和、按行求和、求所有元素的和、隨機打亂等。(13) 理解多維數組的概念,能聲明、創建、初始化、訪問多維數組。(14) 理解數組應用示例:撲克牌混洗和發放、單選題測試評分、矩陣相加。(15) 能使用String類創建字符串對象,理解字符串常量池。(16) 能熟練應用字符串的常用處理操作:字符串比較、獲取字符串長度、獲取指定位置字符、字符數組與字符串相互轉換、查找字符串、字符串拼接、獲取子字符串、字符串轉換等。(17) 理解文本塊的引入,能使用文本塊。(18) 理解正則表達式的概念,并掌握常用正則表達式的使用。(19) 能結合正則表達式與String類的相關方法,完成字符串匹配、字符串拆分、字符串替換。(20) 掌握字符串應用示例:回文判斷、詞頻統計、最長公共子串(21) 理解可變長參數列表,能定義和應用含有可變長參數的方法。(22) 理解命令行參數,能給Java應用程序傳遞命令行參數。3內容45.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例內容55.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例5.1一維數組引例:高校一門課有100人參加考試,計算有多少人的成績超過平均成績。6解決方案:首先讀入這些成績,計算平均成績,然后每個數與平均成績進行比較。為了完成任務,需存儲100個數,于是需要定義100個變量。這有什么問題呢?問題:

(1)聲明100個變量;(令人煩躁…,代碼難以閱讀)

(2)重復書寫100次幾乎完全相同的代碼。解決之道:100個數用一個數組存儲,通過循環完成比較任務。單個數組變量可引用一個大的數據集合數組是一個高效組織數據的方法,其特征:元素個數固定、數據類型相同、有序集5.1一維數組7數組是一個表示相同數據類型集合的數據結構。5.1一維數組85.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1一維數組95.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序數組表示數據類型相同、元素個數固定的有序數據集合,是一個引用數據類型。為了在程序中使用數組,需要聲明一個引用數組的引用變量,并指定數組元素的數據類型。一維數組聲明形式:數據類型[]數組變量名;//推薦形式例:int[]firstArray;//推薦形式數據類型數組變量名[];

例:int

firstArray[];105.1.1數組聲明與創建2.數組基礎知識5.1.1數組聲明與創建在聲明一個數組后,僅僅是創建了一個對數組引用的變量,其值為null,還沒有為數組分配內存空間,無法存儲數組元素。在數組變量聲明后,可以使用new操作符創建一個數組,并把數組的引用賦給數組變量,創建一維數組的一般形式如下:數組變量名=new數據類型[數組長度];115.1.1數組聲明與創建聲明數組變量、創建數組、數組引用賦給數組變量可以在一條語句中同時完成,一般形式如下:數據類型[]數組變量名=new數據類型[數組長度];//形式1數據類型數組變量名[]=new數據類型[數組長度];//形式2例如,下面兩條語句都是創建具有5個元素的int類型數組:int[]firstArray=newint[5];//或intfirstArray[]=newint[5];125.1一維數組135.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.2數組初始化與訪問數組在創建之后,通常要進行初始化操作,給每個數組元素賦初值。對于一維數組,使用如下語法給數組元素賦值:

數組變量名[下標值]=值例,初始化數組firstArray:firstArray[0]=10;firstArray[1]=20;firstArray[2]=30;firstArray[3]=40;firstArray[4]=50;145.1.2數組初始化與訪問數組被創建后,其長度是固定的,且不能被修改,可以使用“數組變量名.length”得到數組長度。例如,firstArray.length的值是5。數組在使用new關鍵字分配內存空間之后,數組元素被賦予默認值:1)數組元素類型是整數類型(byte、short、int和long)時,默認值是0。2)數組元素類型是基本類型中的浮點類型(float、double)時,默認值是0.0。3)數組元素類型是基本類型中的字符類型(char)時,默認值是'\u0000'。4)數組元素類型是基本類型中的布爾類型(boolean)時,默認值是false。5)數組元素類型是引用類型(類、接口和數組)時,默認值是null。155.1.2數組初始化與訪問數組聲明、創建、初始化還可以一步完成,其語法形式如下:數據類型[]數組變量名={值1,值2,值3,…,值n};//或數據類型數組變量名[]={值1,值2,值3,…,值n};初始化列表:由一對花括號括起來的、多個逗號分隔的值的列表示例:int[]firstArray={10,20,30,40,50}初始化列表允許在最后一個值之后多加一個逗號,不影響數組長度,但不能連續加多個逗號,例如:int[]array1={};//合法,長度為零的數組int[]array2={,};//合法,長度為零的數組int[]array3={2,3};//合法,長度為2的數組int[]array4={2,3,};//合法,長度為2的數組int[]array5={2,3,,};//不合法,Java編譯器報錯165.1.2數組初始化與訪問數組示例1:程序清單5-1FirstArrayDemo.java當聲明一個數組之后,創建和初始化可合并在一起完成,其一般形式如下:數據類型[]數組變量;數組變量=new數據類型[]{值1,值2,…,值n};數組示例2:程序清單5-2:TestArrayRef.java17警告使用數組初始化語法時,必須將聲明、創建、初始化數組都放在一條語句中,將它們分開將產生語法錯誤。例,18double[]myList;myList={1.9,2.9,3.4,3.5};

195-1指出下列錯誤的語句()數組中的每個元素都有相同的類型一旦數組被聲明,大小就不能改變一旦數組被創建,大小就不能改變數組中的元素必須是基本數據類型ABCD提交多選題2分205-2以下哪些語句是合法的()?inti=newint(30);doubled[]=newdouble[30];floatf[]={2,3,4,5,6.6};char[]c=newchar();ABCD提交inti[]=(3,4,3,2);E多選題1分5.1一維數組215.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.3foreach循環foreach循環:按順序遍歷數組中的每個元素,而不必考慮數組下標值語法形式:for(數據類型變量名:數組變量名){ //循環體處理語句}舉例:下面的代碼可以按順序輸出myArray數組的數組元素for(inte:myArray)//可以讀作:對數組myArray中的每個元素eSystem.out.printf("%4d",e);22235-3下面代碼的執行結果:2.5,3,42.5342.53.04.02.5,3.0,4.0ABCD提交publicclassTest{publicstaticvoidmain(String[]args){double[]x={2.5,3,4};for(doublevalue:x)System.out.print(value+"");}}單選題1分5.1一維數組245.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.4數組常用操作一維數組的常用操作有:使用輸入值初始化數組、使用隨機值初始化數組、對所有元素求和、找出最大(?。┲导皩聵?、隨機打亂、向左(或右)移動元素、輸出數組元素等。示例:程序清單5-3HandleArrayDemo.java255.1一維數組265.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.5數組與方法1、數組作為方法形參 當數組作為方法形參時,形參的數據類型是數組類型。例如,方法main的參數String[]args,就是一個以字符串數組作為形參的例子。27publicstaticvoiddisplayArray(int[]list){for(inte:list)

System.out.printf("%d,",e);}調用方法時,只需要使用數組名:int[]list1={3,5,7};displayArray(list1);//輸出3,5,7,還有一種較為特殊的調用方式,匿名數組:displayArray(newint[]{3,5,7});//輸出3,5,7,5.1.5數組與方法28示例1:程序清單5-4TestArrayMethod1.java示例2:程序清單5-5TestSwapTwoNums.java5.1.5數組與方法2、數組作為方法返回值類型當方法的返回值類型是一個數組類型時,方法可以返回一個數組。方法返回一個數組,實際上返回的是一個數組的引用。示例:程序清單5-6TestReturnArray.java29305-4判斷對錯:當傳遞一個數組給方法時,一個新的數組被創建并且傳遞給方法()正確錯誤AB提交單選題1分315-5假定一個方法p有如下方法頭:publicstaticint[]p()哪個return語句可以用在p()中?()return1;return{1,2,3};returnint[]{1,2,3};returnnewint[]{1,2,3};ABCD提交單選題1分5.1一維數組325.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.6數組查找查找是計算機程序設計中經常要完成的任務。本節討論:線性查找折半查找線性查找又稱為順序查找,是一種最簡單的查找方法。以處理int類型一維數組為例,線性查找算法的基本思想是:將要查找的關鍵字key值與數組中的元素依次逐個比較,直到找到與key值相等的元素,或者查找完數組沒有找到與之相等的元素。如果找到與key值相等的元素,則返回該數組元素對應的下標值。否則,返回-1。335.1.6數組查找34641973286419732864197328641973286419732864197328333333KeyList示例:程序清單5-7LinearSearch.java線性查找動畫5.1.6數組查找折半查找又稱為二分查找(binarysearch),是一種在有序數組中查找某一特定元素的搜索算法。使用折半查找的前提是數組中的元素必須是已經排好序的。假設一個int類型一維數組已經按升序排列,折半查找法首先讓關鍵字key與數組的中間元素比較。此時,可能出現三種不同的情況:①如果關鍵字key等于中間元素值,則查找成功,返回中間元素對應的下標值。②如果關鍵字key小于中間元素值,則需要在數組的前一半元素中繼續查找key。③如果關鍵字key大于中間元素值,則需要在數組的后一半元素中繼續查找key。在繼續查找key時,從前一半或后一半元素中,再次取出其中間元素,與key進行比較。當把整個數組查找完時,還沒有找到與key相等的元素,返回-1。355.1.6數組查找36123467891234678912346789888KeyList7.數組的查找二分查找:簡單示例動畫5.1.6數組查找為了便于描述折半查找過程,需設計三個下標變量:high、low、mid,它們分別表示當前待查找數組的最后一個元素下標、第一個元素的下標、中間元素的下標。mid的值為:(high+low)/2。起始時,high=數組.length–1,low=0當key小于中間元素值時,查找數組的前半部分,此時數組前半部分的第一個元素下標low不變,high變為mid–1,mid繼續基于公式:(high+low)/2進行更新。當key大于中間元素值時,查找數組的后半部分,此時數組后半部分的第一個元素下標low變為mid+1,high不變,mid的值更新重復上述步驟,直到找到與key相等的元素或者數組查找完,即high小于等于low。375.1.6數組查找38查找成功示例5.1.6數組查找39查找失敗示例5.1.6數組查找折半查找算法實現與測試:程序清單5-8HalfIntervalSearch.java405.1一維數組415.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.7數組排序冒泡排序:交換排序基本思想:從下標為0的元素開始,依次比較兩個相鄰的元素;如果前者大于后者,就交換這兩個相鄰元素的值。上述這個兩兩比較的工作重復進行,直到沒有相鄰元素需要交換為止,就說明排序完成。舉例說明:見右圖算法實現與測試:程序清單5-9BubbleSort.java425.1一維數組435.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.8Arraysjava.utils.Arrays類提供了對數組操作的一系列方法,使用這些方法可以簡化開發過程,提高開發效率。示例:程序清單5-10ArraysDemo1.java445.1.8Arraysjava.utils.Arrays類提供了對數組操作的一系列方法,使用這些方法可以簡化開發過程,提高開發效率。示例:程序清單5-10ArraysDemo1.java455.1.8Arrays46Java提供了幾個重載版本的java.util.Arrays.binarySearch方法(在int,double,char,short,long,float數組中查找給定的關鍵字)int[]list={2,4,7,10,11,45,50,59,60,66,69,70,79};System.out.println("Indexis"+java.util.Arrays.binarySearch(list,11));

char[]chars={'a','c','g','x','y','z'};System.out.println("Indexis"+java.util.Arrays.binarySearch(chars,'t'));

Returnis4Returnis–4(insertionpointis3,soreturnis-3-1)475-6假定:int[]scores={1,20,30,40,50},那么java.util.Arrays.binarySearch(scores,3)返回的值是()0-12-2ABCD提交單選題1分485-7下面哪個方法是對double型數組scores的排序()java.util.Arrays(scores)java.util.Arrays.sorts(scores)java.util.Arrays.sort(scores)java.util.Arrays.sortArray(scores)ABCD提交單選題1分5.1一維數組495.1.1數組聲明與創建5.1.2數組初始化與訪問5.1.3foreach循環5.1.4數組常用操作5.1.8Arrays5.1.9數組復制5.1.5數組與方法5.1.6數組查找5.1.7數組排序5.1.9數組復制數組復制:深度復制、淺度復制深度復制:復制數組的內容淺度復制:復制數組的引用505.1.9數組復制Java類庫提供了數組深度復制的方法:Arrays類的copyOf()方法:publicstaticint[]copyOf(int[]original,intnewLength)Arrays類的copyOfRange()方法:publicstaticint[]copyOfRange(int[]original,intfrom,intto)System類的arraycopy()方法:publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)示例:程序清單5-11TestArrayCopy.java51內容525.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例5.2二維數組二維數組是具有行下標和列下標的數組,可以用來存儲表或矩陣53表的示例矩陣的示例Java語言把二維數組看作是由多個一維數組構成的數組。5.2二維數組545.2.3鋸齒二維數組5.2.4二維數組處理5.2.1二維數組的聲明與創建5.2.2二維數組初始化與訪問5.2二維數組555.2.3鋸齒二維數組5.2.4二維數組處理5.2.1二維數組的聲明與創建5.2.2二維數組初始化與訪問5.2.1二維數組的聲明與創建聲明二維數組的語法如下:數據類型[][]變量名;//推薦形式數據類型變量名[][];//另一種合法形式例如:int[][]matrixs;或intmatrixs[][];創建二維數組的語法格式如下:變量名=new數據類型[m][n];//m,n通常是正整數值例如,matrixs=newint[3][3];565.2.1二維數組的聲明與創建與一維數組一樣,二維數組聲明和創建,也可以一步完成:數據類型[][]變量名=new數據類型[m][n];//m,n通常是正整數值或者數據類型變量名[][]=new數據類型[m][n];//m,n通常是正整數值例如,int[][]matrixs=newint[3][3];或者,intmatrixs[][]=newint[3][3];575.2二維數組585.2.3鋸齒二維數組5.2.4二維數組處理5.2.1二維數組的聲明與創建5.2.2二維數組初始化與訪問5.2.2二維數組初始化與訪問與一維數組一樣,二維數組在創建之后,也具有默認值,默認值規則與一維數組一樣。二維數組也可以采用初始化列表初始化,其一般形式如下:數據類型[][]變量名=二維數組初始化列表;二維數組的初始化列表形式如下:二維數組初始化列表={一維數組初始化列表1,一維數組初始化列表2,…,一維數組初始化列表n};例如,int[][]scores={{78,89,95},{87,98,89},{82,95,92}};595.2.2二維數組初始化與訪問與一維數組一樣,二維數組在創建之后,也具有默認值,默認值規則與一維數組一樣。二維數組也可以采用初始化列表初始化,其一般形式如下:數據類型[][]變量名=二維數組初始化列表;二維數組的初始化列表形式如下:二維數組初始化列表={一維數組初始化列表1,一維數組初始化列表2,…,一維數組初始化列表n};例如,int[][]scores={{78,89,95},{87,98,89},{82,95,92}};60int[][]scores=newint[3][3];scores[0][0]=78;scores[0][1]=89;scores[0][2]=95;scores[1][0]=87;scores[1][1]=98;scores[1][2]=89;scores[2][0]=82;scores[2][1]=95;scores[2][2]=92;等價于5.2.2二維數組初始化與訪問與一維數組一樣,二維數組的聲明,與創建和初始化分開成兩步,例如:int[][]scores;scores=newint[][]{{78,89,95},{87,98,89},{82,95,92}};61二維數組的每一個元素是一個一維數組。二維數組的長度表示其包含多少個一維數組可通過行下標、列下標訪問具體的數組元素625-8創建數組:double[][]x=newdouble[4][5],x.length和x[2].length的值分別是()4和44和55和55和4ABCD提交單選題1分5.2二維數組635.2.3鋸齒二維數組5.2.4二維數組處理5.2.1二維數組的聲明與創建5.2.2二維數組初始化與訪問5.2.3鋸齒二維數組Java語言的二維數組是由多個一維數組構成,各個一維數組的長度可以不相同。這種數組可以稱為鋸齒二維數組,還可以稱為不規則二維數組64訪問鋸齒二維數組,也是需要指定行下標和列下標。例如,xList[0][0]訪問數組元素的值1,xList[0][1]訪問數組元素的值35.2.3鋸齒二維數組如果鋸齒數組的初始值不知道,且知道各個一維數組的長度,那么可以結合new操作符使用如下語法創建鋸齒數組:int[][]xList=newint[4][];xList[0]=newint[5];xList[1]=newint[2];xList[2]=newint[4];xList[3]=newint[1];65665-9以下哪些語句是合法的int[][]r=newint[2];int[]x=newint[];int[][]y=newint[3][];int[][]z={{1,2}};ABCD提交int[][]m={{1,2},{2,3}};Eint[][]n={{1,2},{2,3},};F多選題1分5.2二維數組675.2.3鋸齒二維數組5.2.4二維數組處理5.2.1二維數組的聲明與創建5.2.2二維數組初始化與訪問5.2.4二維數組處理由于二維數組的長度是固定的,所以常常使用嵌套for循環處理二維數組。與一維數組類似,二維數組也有一些常見處理操作:初始化數組、輸出所有數組元素、按列求和、按行求和、求所有元素的和、隨機打亂等程序清單5-12TestTwoDArray.java68695-10下列代碼的輸出是:()123445671381225913ABCD提交publicclassTest{publicstaticvoidmain(String[]args){int[][]matrix={{1,2,3,4},{4,5,6,7},{8,9,10,11},{12,13,14,15}};for(inti=0;i<4;i++)System.out.print(matrix[i][1]+"");}}單選題1分內容705.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例5.3多維數組Java語言把一個二維數組看作是由多個一維數組構成的數組,而一個三維數組是由多個二維數組構成的數組,每個二維數組又是由多個一維數組構成的數組。一個四維數組是由多個三維數組構成數組。因此,可以總結為:一個n(n≥2)維數組可以看作是由多個n-1維數組構成的數組。在聲明和創建多維數組時,可以借鑒二維數組的聲明與創建,示例:int[][][]grades=newint[5][3][2];//5個考生、3門課、兩種考試(筆試、機試)715.3多維數組初始化列表初始化:示例:程序清單5-13TestThreeDArray.java72735-11下列代碼的輸出結果是()1245ABCD提交publicclassTest{publicstaticvoidmain(String[]args){int[][][]data={{{1,2},{3,4}},{{5,6},{7,8}}};System.out.print(data[1][0][0]);}}單選題1分內容745.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例5.4數組應用示例755.4.3矩陣相加5.4.1撲克牌混洗和發放5.4.2單選題測試評分5.4數組應用示例765.4.3矩陣相加5.4.1撲克牌混洗和發放5.4.2單選題測試評分5.4.1撲克牌混洗和發放假設3個玩家在玩撲克牌,如何混洗撲克牌,并給3個玩家發放撲克呢?該玩法不需要大王、小王兩張牌,初始時只需要給每個玩家隨機發放5張牌。一副撲克牌在去掉大王、小王兩張撲克牌后,剩下52張,由黑桃、紅桃、梅花、方塊4種花色構成,每種花色的牌有13張int[]cards=newint[52];//初始化數組for(inti=0;i<cards.length;i++)cards[i]=i;//具有值0-51775.4.1撲克牌混洗和發放示例:程序清單5-14TestPlayingCards785.4數組應用示例795.4.3矩陣相加5.4.1撲克牌混洗和發放5.4.2單選題測試評分5.4.2單選題測試評分假設在某門課教學過程中,進行一個階段小測驗,布置了10單選題進行測試,每道單選題2分,本次測試滿分20分。學生提交的答題表,按學號順序排列。最后,通過自動閱卷,記錄并顯示學生的成績。10道選擇題的正確答案為,1-5題:ABACC,6-10題:DBCBA。80學生答題表:一個二維數組正確答案:一個一維數組學生學號:一個一維數組學生成績:一個一維數組程序清單5-15PhaseExam.java5.4數組應用示例815.4.3矩陣相加5.4.1撲克牌混洗和發放5.4.2單選題測試評分5.4.3矩陣相加矩陣相加運算要求兩個矩陣必須具備相同的維數。假設兩個矩陣A、B具有相同的維數,矩陣元素都是double類型的值,矩陣C=A+B,那么矩陣C的每個元素Cij=Aij+Bij。82程序清單5-16MatrixAddDemo內容835.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例5.5字符串845.5.3文本塊5.5.1String類基礎5.5.2字符串處理5.5字符串855.5.3文本塊5.5.1String類基礎5.5.2字符串處理5.5.1

String類基礎Java語言提供了String類來創建和操作字符串Strings1=newString("Helloworld!");//采用構造方法形式Strings2=newString(newchar[]{'H','e','l','l','o','!’});//通過字符數組創建一個字符串對象byte[]bytes={97,98,99,100};Strings3=newString(bytes);//通過字節數組創建一個字符串對象字符串常量池(Stringconstantpool):JVM為了提高效率并節約內存,對具有相同Unicode字符序列的字面量使用同一個實例865.5.1

String類基礎程序清單5-17展示了字符串常量池與不使用字符串常量池的區別。875.5字符串885.5.3文本塊5.5.1String類基礎5.5.2字符串處理5.5.2字符串處理常見處理:字符串比較、獲取字符串長度、獲取指定位置字符、字符數組與字符串相互轉換、查找字符串、字符串拼接、獲取子字符串、字符串轉換1、字符串比較如果想比較兩個字符串內容是否相等,那么需要使用equals()方法。如果想比較兩個字符串是否同一個對象,可以使用==運算符89Strings1="hello";Strings2="hello";Strings3=newString("hello");System.out.println("s1==s2:"+(s1==s2));//trueSystem.out.println("s1與s2內容是否相等:"+s1.equals(s2));//trueSystem.out.println("s1與s3內容是否相等:"+s1.equals(s3));//true5.5.2字符串處理1、字符串比較Java語言是大小寫敏感的語言,當需要忽略字母大小寫進行比較時,可以使用equalsIgnoreCase()方法Java語言提供了compareTo()方法按字典序比較兩個字符串,compareTo()方法的使用形式如下:pareTo(cmpStr);//返回值是一個整數90Stringstr1="abc";Stringstr2="ABC";System.out.println(str1.equalsIgnoreCase(str2));//輸出trueStringstr1="Ad";Stringstr2="ab";System.out.println(pareTo(str2));//輸出:-32System.out.println(pareTo(str1));//輸出:32System.out.println(pareTo("ab"));//輸出:0 915-12"abc".compareTo("aba")的值是()12-1-2ABCD提交單選題1分5.5.2字符串處理2、獲取字符串長度String類獲取字符串長度的方法是length(),返回字符串對象包含的字符數。92Stringstrl="Hello";System.out.println(strl.length());//輸出55.5.2字符串處理3、獲取指定位置字符String類的方法publiccharcharAt(intindex),返回字符串指定位置index的字符(index從0開始,最大值為:字符串長度-1)93Stringstr="mystr";System.out.println(str.charAt(0));//輸出m5.5.2字符串處理4、字符數組與字符串相互轉換String類的方法publicchar[]toCharArray()可以基于字符串的內容生成一個字符數組并返回字符數組轉換為字符串,可以使用String類的構造方法94Stringstrchar="String2022";char[]chars=strchar.toCharArray();for(inti=0;i<chars.length;i++){//輸出:String2022System.out.print(chars[i]+"");}Stringstr=newString(newchar[]{'A','B','C','D'});5.5.2字符串處理5、查找字符串95

方法描述publicbooleancontains(Strings)判斷此字符串是否包含子字符串s,若包含返回true,否則返回falsepublicintindexOf(Stringstr)在此字符串中,從左向右查找指定字符串的位置,若找不到返回-1publicintindexOf(intch)返回此字符串中指定字符第一次出現的索引。若找不到返回-1publicintindexOf(intch,intfromIndex)返回此字符串中指定字符第一次出現的索引,從指定索引fromIndex處開始搜索。若找不到返回-1publicintindexOf(Stringstr,intfromIndex)在此字符串中,從指定位置從左向右查找指定字符串的位置,若找不到返回-1publicintlastIndexOf(Stringstr)在此字符串中,從右向左查找指定字符串的位置,若找不到返回-1publicintlastIndexOf(Stringstr,intfromIndex)在此字符串中,從指定位置從右向左查找指定字符串的位置,若找不到返回-1publicbooleanstartsWith(Stringprefix)判斷此字符串是否以指定的字符串開頭,若是,則返回true;否則返回falsepublicbooleanstartsWith(Stringprefix,intoffset)從指定位置offset判斷此字符串是否以指定的字符串開頭,若是,則返回true;否則返回falsepublicbooleanendsWith(Stringsuffix)判斷此字符串是否以指定的字符串suffix結尾,若是,則返回true;否則返回false5.5.2字符串處理5、查找字符串96Strings="Wearestudents";intindex1=s.indexOf('a');//index1=3intindex2=s.indexOf("are");//index2=3intindex3=s.indexOf('a',5);//index3=-1System.out.println("中國電子".contains("中電"));//輸出falseSystem.out.println("中國電子".contains("電子"));//輸出trueString[]str={"tst..test","guetjava@sa@2","@test#javademo!!"};intindex4=str[0].indexOf("java");//index4=-1intindex5=str[1].indexOf("java");//index5=4intindex6=str[1].indexOf("@",3);//index6=8intindex7=str[1].lastIndexOf("@");//index7=11booleanisPre=str[2].startsWith("@");//isPre=truebooleanisEnd=str[2].endsWith("!!");//isEnd=true5.5.2字符串處理6、字符串拼接下面使用+拼接多個字符串:如果用+連接字符串和其他數據類型值,會將其他數據類型值先自動轉換為字符串,再連接97Strings1="Hello";Strings2="world";Strings=s1+""+s2+"!";System.out.println(s);//輸出:Helloworld!intage=25;Strings="ageis"+age;System.out.println(s);//輸出:ageis255.5.2字符串處理6、字符串拼接方法publicStringconcat(Stringstr),其作用是連接多個字符串:如果需要將多個字符串拼接在一起,并用一個界定符分隔,可以使用String類的靜態方法join()從JavaSE11開始,Java語言提供了repeat方法,對相同字符串重復拼接:98"care".concat("less")//返回字符串:"careless""to".concat("get").concat("her")//連續調用,返回字符串:"together"Stringstr=String.join("#","C","Java","Python");//str:C#Java#PythonStrings="hello".repeat(3);//s:hellohellohello995-13字符A的Unicode值是65,表達式"A"+1的值是()66BA1非法表達式ABCD提交單選題1分5.5.2字符串處理7、獲取子字符串100Stringstr1="Helloword";Stringsubstr1=str.substring(3);//獲取子字符串,substr1值為lowordStringstr2="Helloword";Stringsubstr2=str.substring(0,3);//substr的值為hel方法描述publicStringsubstring(intbeginIndex)返回一個字符串,其內容是此字符串的子字符串。子字符串以指定索引處的字符開始,并延伸到此字符串的末尾。publicStringsubstring(intbeginIndex,intendIndex)返回一個字符串,其內容是此字符串的子字符串。子字符串從指定的beginIndex開始,并擴展到索引endIndex-1處的字符。因此,子字符串的長度是endIndex-beginIndex。Stringstr3=;Stringsub_str1=str2.substring(0,3);Stringsub_str2=str2.substring(7);Stringstr4=sub_str1+"****"+sub_str2;//str4:187****09881015-14"SELECT".substring(0,5)返回的值為()"SELECT""SELEC""SELE""LECT"ABCD提交單選題1分此題未設置答案,請點擊右側設置按鈕5.5.2字符串處理8、從控制臺讀取字符串從控制臺讀取字符串可使用Scanner類的next()方法或者nextLine()方法。102Scannerinput=newScanner(System.in);Stringstr=input.next();//從控制臺讀取一個字符串StringstrNew=input.nextLine();輸入:helloIamacoder!

讀取的字符串是整行字符串,strNew的值是:helloIamacoder!。5.5.2字符串處理9、去除空格103Stringstr="hello";StringstrNew=str.trim();//strNew為hello5.5.2字符串處理10、大小寫轉換String類大小寫轉換方法是:publicStringtoLowerCase()和publicStringtoUpperCase()104Stringstr1="ABCDefg";Stringstr2="abcDEFG";StringlowerStr=str1.toLowerCase();//lowerStr為abcdefgStringupperStr=str2.toUpperCase();//upperStr為ABCDEFG1055-15下面哪一個語句能夠正確地返回JAVA()toUpperCase("Java")"Java".toUpperCase("Java")"Java".toUpperCase()String.toUpperCase("Java")ABCD提交單選題1分5.5.2字符串處理11、基本類型轉換字符串當需要把基本類型值轉換為字符串時,可以使用String類的靜態方法publicstaticStringvalueOf(基本數據類型變量名)106String.valueOf(123);//"123"String.valueOf(45.67);//"45.67"String.valueOf(45.67f);//"45.67"String.valueOf(true);//"true"String.valueOf('A');//"A"5.5字符串1075.5.3文本塊5.5.1String類基礎5.5.2字符串處理5.5.3文本塊文本塊(TextBlocks)在JavaSE15中被確定下來成為正式功能文本塊是一種多行字符串文字,它以三個雙引號字符(""")開始,以三個雙引號字符(""")結束108一段HTML文本,如果用傳統雙引號字符串表示,需要進行拼接,并使用轉義字符采用文本塊形式定義一段HTML文本,省略了轉義序列,縮進保留,可讀性更好5.5.3文本塊文本塊避免了大多數轉義序列的需要,以一種可預測的方式自動設置字符串的格式,并在需要時使開發人員可以控制格式,簡化編寫Java程序的任務。注意:(1)文本塊以3個雙引號"""開始和結束,開始的3個雙引號"""必須單獨成一行。(2)文本塊可以在3個雙引號"""內插入任何字符,包括換行符。(3)文本塊可以使用轉義字符來插入雙引號或其他特殊字符。(4)文本塊支持縮進,提升閱讀的清晰性;Java編譯器在處理文本塊縮進時,會自動刪除不需要的縮進:每行結尾的空格都會刪除;每行開始的共有的空格會自動刪除;只保留相對縮進。示例:程序清單5-18TestTextBlock.java1091105-16下面關于文本塊定義,正確的是()Stringstr="""json""";Stringstr="""

json""";TextBlockstr="""json""";String[]str="""

json""";ABCD提交單選題1分內容1115.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例5.6正則表達式一些應用程序具有驗證用戶輸入的需求,例如,一個應用程序要求用戶輸入一個手機號,那么該程序就應該要驗證輸入的字符是否數字,是否11位。如何編寫代碼來驗證用戶的輸入呢?通常,一個有效的做法就是使用正則表達式(RegularExpression,簡寫為regex)正則表達式:是由普通字符以及特殊符號組成的一個字符串,用來描述匹配一個字符串集合的模式。"java-\\d":java-0、java-1、java-2、…、java-9匹配11位手機號碼,以數字1開頭:"1\\d{10}“常用正則表達式符號和示例1125.6正則表達式113符號含義示例解釋.

匹配除\n以外的任何字符

a..b以a開頭,b結尾,中間包括2個任意字符的長度為4的字符串\d

匹配單個數字字符,相當于[0-9]\d{3}(\d)?包含3個或4個數字的字符串\D

匹配單個非數字字符,相當于[^0-9]\D(\d)*以單個非數字字符開頭,后接任意個數字字符串\w匹配單個數字、大小寫字母字符,相當于[0-9a-zA-Z]\d{3}\w{4}以3個數字字符開頭的長度為7的數字字母字符串\W匹配單個非數字、大小寫字母字符,相當于[^0-9a-zA-Z]\W+\d{2}以至少1個非數字字母字符開頭,2個數字字符結尾\p{P}一個標點字符!"#$%&'()+,-./:<>=?@[\]^_{}|`~java\p{P}以java開頭,后接任意一個標點符號的字符串,例如,java#、java$、…[

]

可接收的字符列表[efgh]e、f、g、h中的任意1個字符[^]

不接收的字符列表[^abc]除a、b、c之外的任意1個字符,包括數字和特殊符號

|匹配“|”之前或之后的表達式

ab|cdab或者cd(

)

將子表達式分組

(abc)將字符串abc作為一組5.6正則表達式114符號含義示例解釋

-

連字符A-Z任意單個大寫字母

*

指定字符重復0次或n次

(abc)*僅包含任意個abc的字符串,等效于\w*+

指定字符重復1次或n次m+(abc)*

以至少1個m開頭,后接任意個abc的字符串?指定字符重復0次或1次m+abc?以至少1個m開頭,后接ab或abc的字符串{n}只能輸入n個字符

[abcd]{3}由abcd中字母組成的任意長度為3的字符串{n,}指定至少n個匹配[abcd]{3,}由abcd中字母組成的任意長度不小于3的字符串

{n,m}指定至少n個但不多于m個匹配

[abcd]{3,5}由abcd中字母組成的任意長度不小于3,不大于5的字符串^指定起始字符

^[0-9]+[a-z]*以至少1個數字開頭,后接任意個小寫字母的字符串$指定結束字符^[0-9]\-[a-z]+$以1個數字開頭后接連字符“–”,并以至少1個小寫字母結尾的字符串5.6正則表達式1155.6.3字符串替換5.6.1字符串匹配5.6.2字符串拆分5.6正則表達式1165.6.3字符串替換5.6.1字符串匹配5.6.2字符串拆分5.6.1字符串匹配booleanmatches(Stringregex):表示此字符串是否匹配給定的正則表達式regex117Stringregex1="java-\d";System.out.println("java-1".matches(regex1));//輸出trueSystem.out.println("java-2".matches(regex1));//輸出trueSystem.out.println("java-10".matches(regex1));//輸出false//判斷字符串是否符合手機號碼規則:數字1開頭,后接10個數字Stringregex2="1\\d{10}";System.out.println(.matches(regex2));//輸出trueSystem.out.println("03978308333".matches(regex2));//輸出false5.6正則表達式1185.6.3字符串替換5.6.1字符串匹配5.6.2字符串拆分5.6.2字符串拆分119方法描述publicString[]split(Stringregex)基于給定正則表達式的匹配項對字符串進行拆分,返回字符串數組publicString[]split(Stringregex,intlimit)基于給定正則表達式的匹配項對字符串進行拆分,返回字符串數組,limit參數確定模式匹配多少次,最后返回的字符串數組長度由limit決定Stringstr="192,34?56!8";String[]strList=str.split("\\p{P}");for(inti=0;i<strList.length;i++){System.out.print(strList[i]+"");}19234568針對split(regex,limit)版本,如果limit<=0,split(regex,limit)等同于split(regex)。如果limit>0,模式匹配次數最多為limit–1次Stringstr="192,34?56!8";String[]strList1=str.split("\\p{P}",-1);//strList1:19234568,4個元素String[]strList2=str.split("\\p{P}",0);//strList2:19234568,4個元素String[]strList3=str.split("\\p{P}",1);//strList3:192,34?56!8,1個元素String[]strList4=str.split("\\p{P}",2);//strList4:19234?56!8,2個元素String[]strList5=str.split("\\p{P}",3);//strList5:1923456!8,3個元素5.6正則表達式1205.6.3字符串替換5.6.1字符串匹配5.6.2字符串拆分5.6.3字符串替換121

方法描述publicStringreplace(CharSequencetarget,CharSequencereplacement)將目標字符序列替換成第二個參數位置上的字符序列,返回新的字符串,不支持正則表達式publicStringreplaceAll(Stringregex,Stringreplacement)將目標字符子串或者匹配正則表達式的子串,替換成第二個參數位置上的字符序列,返回新的字符串publicStringreplaceFirst(Stringregex,Stringreplacement)將目標字符子串或者匹配正則表達式的第一個符合條件的子串,替換成第二個參數位置上的字符序列,返回新的字符串,支持正則表達式//不使用正則表達式的替換Stringstr1="北京:海淀:中關村";System.out.println(str1.replace(":",","));//輸出:北京,海淀,中關村Stringstr2="MyJavaStringandMatrix";System.out.println(str2.replaceAll("a","*"));//輸出:MyJ*v*String*ndM*trixSystem.out.println(str2.replaceFirst("a","*"));//輸出:MyJ*vaStringandMatrix//使用正則表達式的替換System.out.println(str1.replaceAll("\\p{P}","#"));//輸出:北京#海淀#中關村System.out.println(str1.replaceFirst("\\p{P}","#"));//輸出:北京#海淀:中關村5.6.3字符串替換下面是使用正則表達式將手機號中間四位替換成*進行脫敏處理122Stringstr3=;Stringreg1="(\\d{3})(\\d{4})(\\d{4})";//數字分成三組System.out.println(str3.replaceAll(reg1,"$1****$3"));//輸出:187****0456$1、$2、$3分別對應正則表達式3個部分\\d{3}、\\d{4}、\\d{4}在replaceAll方法中,"$1****$3"表示第一個部分、第三個部分保持不變,中間部分用****替換內容1235.1一維數組5.2二維數組5.3多維數組5.4數組應用示例5.8可變長參數列表5.9命令行參數5.5字符串5.6正則表達式5.7字符串應用示例5.7字符串應用示例一個字符串如果從左向右讀和從右向左讀是一樣的,這個字符串被稱為回文(Palindrome)“level”、“noon”、“dad”、“mom”都是回文;而“te

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論