Java語言程序設(shè)計(jì)課件第 4 章 數(shù)組與字符串_第1頁
Java語言程序設(shè)計(jì)課件第 4 章 數(shù)組與字符串_第2頁
Java語言程序設(shè)計(jì)課件第 4 章 數(shù)組與字符串_第3頁
Java語言程序設(shè)計(jì)課件第 4 章 數(shù)組與字符串_第4頁
Java語言程序設(shè)計(jì)課件第 4 章 數(shù)組與字符串_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本章主要內(nèi)容:4.1數(shù)組4.1.1一維數(shù)組4.1.2多維數(shù)組的應(yīng)用4.2字符串4.2.1字符串的表示4.2.2字符串的常用方法4.2.3使用StringTokenizer字符分析器4.2.4正則表達(dá)式4.2.5main()方法中的參數(shù)4.3StringBuffer類4.1數(shù)組4.1.1一維數(shù)組數(shù)組是具有相同類型變量的集合。在數(shù)組中,各個變量稱之為元素。其中,同一數(shù)組中的所有元素都有相同的名字,只是下標(biāo)不同。只有一個下標(biāo)的數(shù)組稱之為一維數(shù)組,有多個下標(biāo)的數(shù)組稱之為多維數(shù)組。4.1.1一維數(shù)組

1、一維數(shù)組的定義一維數(shù)組定義的一般形式為:數(shù)據(jù)類型數(shù)組名[]=new數(shù)據(jù)類型[數(shù)組容量];說明:數(shù)據(jù)類型表示數(shù)組元素的類型。數(shù)組名的命名規(guī)則跟變量名一樣。方括號中的數(shù)組容量,即數(shù)組所包含元素的個數(shù)。例如:定義數(shù)組inta[]=newint[10];表示定義了一個整型的數(shù)組a,含有10個元素(每個元素都是整型)。4.1.1一維數(shù)組表示數(shù)組元素的一般形式為:

數(shù)組名[下標(biāo)]數(shù)組的第一個元素的下標(biāo)總是從0開始的。對于上面所定義的數(shù)組a[],其元素依次為a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。4.1.1一維數(shù)組其實(shí),數(shù)組名代表的是數(shù)組的首地址,下標(biāo)則是數(shù)組元素到數(shù)組開始的偏移量。系統(tǒng)為數(shù)組在內(nèi)存分配的是一片連續(xù)的存儲的單元,如定義了“inta[]”有10個元素,則它的10個元素在內(nèi)存中的排列情況如圖所示:4.1.1一維數(shù)組2、一維數(shù)組的初始化數(shù)組初始化是指在數(shù)組定義時給數(shù)組元素賦予初值。

數(shù)組初始化賦值的一般形式為:數(shù)據(jù)類型數(shù)組名[]={值1,值2,……,值n};其中在{}中的各數(shù)據(jù)值依次為各元素的初值,各值之間用逗號間隔。例如:

inta[]={1,2,3,4,5,6,7,8,9,10};相當(dāng)于a[0]=1;a[1]=2;...;a[9]=10;4.1.1一維數(shù)組經(jīng)常采用循環(huán)結(jié)構(gòu)來給數(shù)組元素進(jìn)行初始化,先聲明一個數(shù)組,然后在循環(huán)中使用賦值語句逐個初始化數(shù)組元素。例如:

inta[]=newint[10];for(i=0;i<10;i++){a[i]=i+1;}通過循環(huán),數(shù)組下標(biāo)i從0逐個遞增到9(因?yàn)楫?dāng)i=10時,條件i<10為假,不能進(jìn)入循環(huán)體)。4.1.1一維數(shù)組3、確定數(shù)組的容量為了獲得數(shù)組的容量,可以使用數(shù)組的length屬性,即:數(shù)組名.length注意,不能在length后面加一個圓括號(),否則造成錯誤,因?yàn)閘ength不是一個方法。length是由Java平臺為所有數(shù)組提供的一個屬性?!纠?-1】隨機(jī)產(chǎn)生10個100以內(nèi)的整數(shù),并找出其中的最大數(shù)。

在Java中Math類的random()方法可以產(chǎn)生隨機(jī)數(shù),但其產(chǎn)生的隨機(jī)數(shù)是0.0~1.0之間double類型的數(shù)。為了能產(chǎn)生100以內(nèi)的隨機(jī)整數(shù),可以用下列辦法:(int)(Math.random()*N);其中,N=100,并對其進(jìn)行強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換,則得到100以內(nèi)的隨機(jī)整數(shù)。classExample4_1{publicstaticvoidmain(String[]args){inti,max; inta[]=newint[10]; intN=100; for(i=0;i<a.length;i++) { a[i]=(int)(Math.random()*N);System.out.println("a["+i+"]="+a[i]); } max=a[0]; for(i=1;i<a.length;i++) if(a[i]>max)max=a[i]; System.out.println(); System.out.println("最大值max="+max);}}程序說明:(1)在程序第9行的for循環(huán)結(jié)構(gòu)中,a.length為獲得數(shù)組中元素的個數(shù)。由于a.length=10,故產(chǎn)生10個100以內(nèi)的整數(shù),并逐個賦值給數(shù)組a的每個元素,完成對數(shù)組a的初始化。(2)在程序的第14行對數(shù)組的第一個元素a[0]進(jìn)行操作,把a(bǔ)[0]賦值給max。(3)在程序第15行的for結(jié)構(gòu)中,從a[1]到a[9]逐個與max中的內(nèi)容比較,若比max的值大,則把該元素的值充當(dāng)max,因此max總是在已比較過的元素中值最大者。比較結(jié)束,輸出max的值。該循環(huán)使用a.length來決定什么時候終止循環(huán)。(4)由于是產(chǎn)生隨機(jī)數(shù),每次運(yùn)行程序的結(jié)果是不一樣的。增強(qiáng)的for循環(huán)又稱為foreach循環(huán),是操作數(shù)組的一種簡便語法,采用這種語法可以不使用下標(biāo)變量即完成對數(shù)組的遍歷。1 publicclassExample2 {3 publicstaticvoidmain(String[]args)4 {5 int[]a={1,2,3,4};6 7 for(inti:a)8 {9 System.out.println(i);10 }11 }12 }【程序說明】(1)第7行代碼的含義為“對數(shù)組a中的每個int類型的元素i”。注意i并不是數(shù)組的下標(biāo),而是在每一重循環(huán)中存儲了具體的元素值。(2)注意這種語法并不能完全取代for循環(huán),當(dāng)需要改變數(shù)組元素時,還是需要使用下標(biāo)變量進(jìn)行訪問。4.1.2多維數(shù)組的應(yīng)用在Java中,多維數(shù)組是由若干行和若干列組成的數(shù)組。在人們工作生活與學(xué)習(xí)中,要使用二維表格、矩陣、行列式等,都可以表示成多維數(shù)組。例如:

intD[][]=newint[3][4];該語句聲明并創(chuàng)建了一個3行4列的數(shù)組D。這個數(shù)組在邏輯上可以表示成一個int類型的矩陣。

25536719

D=

386590

77

12834492也就是說,這個數(shù)組在邏輯上可以表示為:

D[0][0]D[0][1]D[0][2]D[0][3]D[1][0]D[1][1]D[1][2]D[1][3]D[2][0]D[2][1]D[2][2]D[2][3]【例4-2】聲明一個二維數(shù)組,為數(shù)組的每個元素賦值,并輸出數(shù)組的值。

classExample4_2{publicstaticvoidmain(Stringargs[]){intD[][]=newint[4][5];inti,j,k=0;for(i=0;i<4;i++)for(j=0;j<5;j++) {D[i][j]=k;k++;}for(i=0;i<4;i++) {for(j=0;j<5;j++)System.out.print(D[i][j]+"");System.out.println();}}}4.2字符串字符串是由字符組成的序列,是程序設(shè)計(jì)中最常用的一種引用數(shù)據(jù)類型。字符串用String表示。其實(shí),一個字符串就是一個字符(Char)類型的數(shù)組。例如“Java”這個字符串就是由J、a、v、a這4個字符所組成的。4.2.1字符串的表示

4.2.1字符串的表示1、字符串變量聲明使用字符串前,必須先聲明該字符串變量,聲明和創(chuàng)建字符串對象的方法示例如下。設(shè)要聲明和創(chuàng)建一個字符串“thisisaStirng.”,其方法如下:

Stringstr=newString("thisisaStirng.");

由于字符串是經(jīng)常使用的一個類,因此,在Java語言中可將其簡寫為:

Stringstr="thisisaString.";4.2.1字符串的表示2、字符串的構(gòu)造方法字符串String類還有兩個常用的構(gòu)造方法。(1)用字符型數(shù)組創(chuàng)建一個字符串:

String(chara[]):例如:

chardata[]={'a','b','c'};Stringstr=newString(data);它等效于:Stringstr="abc";(2)用字節(jié)型數(shù)組創(chuàng)建一個字符串:

String(byte[]

bytes,int

offset,int

length)

這里

bytes為字節(jié)型數(shù)組,

offset為數(shù)據(jù)的開始位置,length為所取數(shù)據(jù)的長度。4.2.2字符串的常用方法表4.1String類的常用成員方法方法說明length()取得字符串的字符長度equals()判斷兩個字符串中的字符是否等于toLowerCase()轉(zhuǎn)換字符串中的英文字符為小寫toUpperCase()轉(zhuǎn)換字符串中的英文字符為大寫4.2.2字符串的常用方法1、求字符串的長度具體方法如下:

publicintlength();例如:Stringstr1="Hello!";Stringstr2="你身體好嗎?";System.out.println(str1.length());System.out.println(str2.length());屏幕將顯示二個6,因?yàn)樽址癏ello!”的長度為6(6個字符),而“你身體好嗎?”也是6個字符。在Java中,每個字符都是占用16個比特的Unicode字符,所以漢字與英文或其他符號只要其字符個數(shù)相同,則計(jì)算的長度也都是相同的。4.2.2字符串的常用方法2、比較兩個字符串

String類中有三個方法可以比較兩個字符串是否相同。

publicintcompareTo(Stringstr);

publicbooleanequals(Objectobj);

publicbooleanequalsIgnoreCase(Stringstr);三種方法的說明如下:4.2.2字符串的常用方法(1)方法compareTo(Stringstr)將當(dāng)前字符串與str表示的參數(shù)字符串進(jìn)行比較,并返回一個整型數(shù)值。如果這兩個字符串完全相同,則compareTo()方法返回0;如果當(dāng)前字符串按字典順序大于str參數(shù)字符串,則compareTo()方法返回大于0的整數(shù);反之,如果當(dāng)前字符串按字典順序小于str參數(shù)字符串,則compareTo()方法返回小于0的整數(shù)。例如:

Strings="abc",s1="aab",s2="abc",s3="abd";inti,j,k;i=pareTo(s1);j=pareTo(s2);k=pareTo(s3);語句執(zhí)行的結(jié)果是分別給i、j、k三個變量賦值為1、0、-1。4.2.2字符串的常用方法(2)方法equals(Objectobj)將當(dāng)前字符串與obj表示的參數(shù)字符串進(jìn)行比較,如果這兩個字符串完全相同,則equals()方法返回true,否則返回false。例如:

Strings="abc",s1="aab",s2="abc",s3="ABC";booleanb1=s.equals(s1);booleanb2=s.equals(s2);booleanb3=s.equals(s3);語句執(zhí)行的結(jié)果是分別給b1、b2、b3三個變量賦值為false、true、false。4.2.2字符串的常用方法(3)方法equalsIgnoreCase(Stringstr)與方法equals()的用法相似,只是字符串比較時不計(jì)大小寫的差別。3、字符串與數(shù)值的轉(zhuǎn)換字符串str轉(zhuǎn)換為整型:intx=Integer.parseInt(str);字符串str轉(zhuǎn)換為float型:floatn=Integer.parseFloat(str);也可以:floatn=Float.valueOf(str).floatValue();

字符串str轉(zhuǎn)換為Double型:Doubleb=Double.valueOf(str).doubleValue();4.2.2字符串的常用方法數(shù)值轉(zhuǎn)換為字符串:

String.valueOf(bytn);String.valueOf(intn);String.valueOf(floatn);

…例如:

Stringstr=String.valueOf(124.4);4.2.2字符串的常用方法4、字符串與字節(jié)數(shù)組的轉(zhuǎn)化要將一個字符串轉(zhuǎn)化為字節(jié)數(shù)組,可用下列方法:byted[]=字符串對象.getBytes();反之,要將一個字節(jié)數(shù)組轉(zhuǎn)化為字符串,則用字符串的構(gòu)造方法就能達(dá)到目的。String(byte[],intoffset,intlength)其中,byte[]是指定的字節(jié)數(shù)組,offset為數(shù)組起始位置,length為取的字節(jié)個數(shù)。4.2.2字符串的常用方法importjavax.swing.*;classExample4_3{publicstaticvoidmain(Stringargs[]) { byted[]="我們正在教室上課".getBytes(); Strings=newString(d,8,4);//取數(shù)組中二個漢字(一個漢字占兩個字節(jié))

JOptionPane.showMessageDialog(null,"第八個字符位置開始的二個漢字:"+s); System.exit(0);}}【例4-3】應(yīng)用字節(jié)數(shù)組查找字符串中字符的位置。

當(dāng)我們分析一個字符串并將字符串分解成可被獨(dú)立使用的單詞時,可以使用java.util包中的StringTokenizer類。StringTokenizer對象被稱為字符分析器。其構(gòu)造方法為:StringTokenizer(Stringstr,Stringdelim)將指定字符串str按字符delim為分隔符進(jìn)行分解。4.2.3使用StringTokenizer字符分析器

4.2.3使用StringTokenizer字符分析器StringTokenizer類的常用方法:hasMoreTokens():檢測字符串中是否還有語言符號,若有語言符號就返回true,否則返回false。nextToken():逐個獲取字符串中的語言符號。countTokens():計(jì)算調(diào)用了nextToken()方法的次數(shù),用于統(tǒng)計(jì)字符串中的語言符號的個數(shù)。4.2.3使用StringTokenizer字符分析器例如:

StringTokenizerst=newStringTokenizer("thisisatest","");while(st.hasMoreTokens()){System.out.println(st.nextToken());}輸出以下字符串:

thisisatest【例4-4】字符分析器的示例。importjavax.swing.*;importjava.util.*;classExample4_4{publicstaticvoidmain(Stringargs[]) {Strings="thisisastring";StringTokenizerst=newStringTokenizer(s,",");//空格和逗號做分

intnumber=st.countTokens();while(st.hasMoreTokens()){Stringstr=st.nextToken();System.out.println(str);} System.out.println("s共有"+number+"個單詞"); System.exit(0);}}4.2.4正則表達(dá)式正則表達(dá)式是一種可以用于模式匹配和替換的規(guī)范,一個正則表達(dá)式就是由普通的字符(例如字符‘a(chǎn)’~‘z’)以及特殊字符(稱為元字符)組成的文字模式。該模式用以描述在查找文字主體時待匹配的一個或多個字符串。正則表達(dá)式作為一個模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。正則表達(dá)式對于文本操作提供了強(qiáng)大的搜索和替換功能。4.2.4正則表達(dá)式1、正則表達(dá)式的構(gòu)造假設(shè)要搜索一個包含字符“cat”的字符串,搜索用的正則表達(dá)式就是“cat”。如果搜索對大小寫不敏感,單詞“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是說:正則表達(dá)式:cat匹配:catalog、Catherine、sophisticated4.2.4正則表達(dá)式2、Pattern和Matcher類當(dāng)我們要使用正則表達(dá)式對文本進(jìn)行操作時,要使用java.util.regex包中的Pattern類和Matcher類。4.2.4正則表達(dá)式(1)正則表達(dá)式模式對象和匹配器對象的構(gòu)造以Pattern類的compile()方法構(gòu)造正則表達(dá)式模式對象:Patternpattern1=Ppile(Stringregex);參數(shù)regex為要編譯的表達(dá)式。以Pattern類的matcher()方法構(gòu)造匹配器對象:Matchermatcher1=pattern1.matcher(CharSequenceinput);參數(shù)input為要匹配的字符序列。4.2.4正則表達(dá)式例如:

Patternpattern1=Ppile("^Java.*");Matchermatcher1=pattern1.matcher("Java是一種程序語言");表示如下的正則表達(dá)式:正則表達(dá)式模式:以“Java”開頭的所有字符要匹配的字符序列:字符串“Java是一種程序語言”4.2.4正則表達(dá)式(2)查找與替換通過匹配器對象Matcher類的方法來對文本內(nèi)容進(jìn)行操作,Matcher類的常用方法有:matches():查找與正則表達(dá)式模式對象匹配的字符串,返回true或false。replaceAll(Stringreplacement):替換給定的字符串。appendReplacement(StringBuffersb,Stringreplacement):通過字符串緩沖區(qū)sb替換給定的字符串?!纠?-5】正則表達(dá)式應(yīng)用示例。1

/*正則表達(dá)式應(yīng)用*/2

importjava.util.regex.*;3

classExample4_54

{5

publicstaticvoidmain(String[]args)6

{7

Patternpattern1,pattern2,pattern3,pattern4;8

Matchermatcher1,matcher2,matcher3,matcher4;910//查找以Java開頭,任意結(jié)尾的字符串11pattern1=Ppile("^Java.*");12

matcher1=pattern1.matcher("Java是一種程序語言");13booleanb=matcher1.matches();14//當(dāng)條件滿足時,將返回true,否則返回false15System.out.println("查找以Java開頭的字符串:"+b);1617//以多條件分割字符串時18pattern2=Ppile("[,|]");19String[]strs=pattern2.split("JavaHelloWorldJava,Hello,,World|Sun");20System.out.println("分割字符串:");21 for(inti=0;i<strs.length;i++)22 {23System.out.println(strs[i]);24}2526//文字替換(全部)27pattern3=Ppile("正則");28matcher3=pattern4.matcher("正則HelloWorld,正則表達(dá)式HelloWorld");29//替換第一個符合正則的數(shù)據(jù)30System.out.println("文字替換(全部):"+matcher4.replaceAll("Java"));3132//文字替換(置換字符)33pattern4=Ppile("表達(dá)式");34matcher4=pattern4.matcher("表達(dá)式HelloWorld,表達(dá)式HelloWorld");35StringBuffersbr=newStringBuffer();36while(matcher4.find())37 {38matcher4.appendReplacement(sbr,"Java");39}40matcher4.appendTail(sbr);41System.out.println("文字替換(置換字符):"+sbr.toString());42}43}運(yùn)行結(jié)果如下:

查找以Java開頭的字符串:true分割字符串:JavaHelloWorldJavaHelloWorldSun文字替換(全部):JavaHelloWorld,JavaHelloWorld文字替換(置換字符):JavaHelloWorld,JavaHelloWorld4.2.5main()方法中的參數(shù)在Java應(yīng)用程序中必須要有publicstaticvoidmain(Stringargs[])方法。main()方法中的參數(shù)是一個字符串?dāng)?shù)組args[],這個數(shù)組的元素args[0],args[1],…,args[n]的值都是字符串。args是命令行參數(shù),其功能是接收運(yùn)行程序時通過命令行輸入的參數(shù)。其一般形式為:java類文件名字符串1字符串2

…字符串n【例2-24】main()方法中的參數(shù)示例。

1publicclassStrArray2{3publicstaticvoidmain(Stringargs[])4{5inti;6for(i=0;i<args.length;i++)7System.out.pringln(args[i]);8}9}運(yùn)行程序時,在命令行中輸入:javaStrArrayThisisaApplication!程序的輸出結(jié)果為:ThisisaApplication!4.3StringBuffer類StringBuffer類可以實(shí)現(xiàn)對字符串中某個字符的插入、修改、刪除及替換操作。表4.3StringBuffer類的常用方法【例4-7】StringBuffer對象示例。1classExample4_72{3 publicstaticvoidmain(String[]args)4 {5 StringBuffers=newStringBuffer("01234");6 s.append('5');7System.out.println(s);8s.insert(3,"abc");9 System.out.println(s);10s.deleteCharAt(3);11System.out.println(s);12s.delete(2,4);13System.out.println(s);14 }15}刪除指定位置的子字符串刪除指定位置的字符在指定位置插入字符串創(chuàng)建StringBuffer對象在字符串末尾添加字符數(shù)組列表ArrayList類java.util包中提供了一個數(shù)組列表類ArrayList。相比數(shù)組,ArrayList類有兩個便利之處:一是在定義時不需要指定大小,可以在使用的過程中根據(jù)需要增減容量;二是為許多常見的任務(wù)提供了操作方法,例如插入和刪除元素。1 importjava.util.*;2 3 publicclassExample4_84 {5 publicstaticvoidmain(String[]args)6 {7 ArrayListlist=newArrayList();8 System.out.println(list.size());9 list.add("a");10 list.add("c");11 list.add("d");12 System.out.println(list.size());13 for(O

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論