java第四章字符串与数组.ppt_第1页
java第四章字符串与数组.ppt_第2页
java第四章字符串与数组.ppt_第3页
java第四章字符串与数组.ppt_第4页
java第四章字符串与数组.ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章字符串与数组,4.1字符串4.2数组,4.1字符串,4.1.1String类4.1.2StringBuffer类4.1.3修改字符串4.1.4字符串的比较4.1.5字符串的转化4.1.6字符串“+”操作,4.1.1String类,String类是字符串常量类,该类对象在建立后不能修改。Java编译器保证每个字符串常量都是String类对象。用双引号括住的一串字符即为字符串常量,比如“WelcometoJava!,在通过编译器编译后成为String对象。因而,实例化一个String类对象既可以通过字符串常量,也可以通过系统提供的构造方法。,一String类的基本方法前面谈到过String类的一些基本属性,本节我们讨论String类的一些常用方法。1String类初始化String类可用字符串常量对其初始化,也可调用其构造方法来进行。例如:Strings=WelcometoJavaWrold!;String类主要构造方法见表4.1。,表4.1String类的构造方法,例如:charchar1=a,b,c,d;Strings1=newString();Strings2=newString(char1);Strings3=newString(char1,1,2);/生成字符串“bc”Strings4=newString(char1,0,1,3);/生成字符串“bcd”,String使用示例,Strings=newString()生成一个空串下面用不同方法生成字符串“abc”charchars1=a,b,c;charchars2=a,b,c,d,e;Strings1=newString(chars1);Strings2=newString(chars2,0,3);byteascii1=97,98,99;byteascii2=97,98,99,100,101;Strings3=newString(ascii1,0);Strings4=newString(ascii2,0,0,3);,2字符串类的String访问字符串的访问即字符串的引用,它包括得到字符串的长度,得到指定位置的字符或子串,以及得到某个字符或子串在字符串中的索引位置等。String类的功能很强,几乎覆盖了所有的字符串运算操作。表4.2给出了一些常用的字符串运算方法。,表4.2String类的常用方法列表,二String类方法使用举例例如:Strings=abCD;inti=s.length();/i=4Strings1=s.toLowerCase();/s1=abcdStrings2=s.toUpperCase();/s2=ABCDcharc=s.charAt(3);/c=DStrings3=s.substirng(2);/s3=CDStrings4=s.substirng(2,3);/s4=C,booleanb=s.regionMatches(1,bCE,0,2);/b=falsebooleanb1=s.startWith(ab);/b1=truebooleanb2=s.endWith(de);/b2=falseintm=s.indexOf(C);/m=2intk=s.lastIndexOf(C);/k=2Strings5=s.replace(b,B);/s5=aBCDdoubled=5.234;Strings6=String.valueOf(d);/s6=5.234,4.1.2StringBuffer类,String类是字符串常量类,初始化后就不能进行修改,而StringBuffer类是字符串缓冲区,不仅可以接受修改,还可以读入整个文件。在Java中,StringBuffer类是一个可以修改的字符串对象,使用起来比String类更加灵活、方便。Java中并不支持运算符的重载,但“+”是个例外,例如,对语句:Strings=Welcome+to+Java!;,编译器首先生成类StringBuffer的一个实例,然后连续调用方法append(),最后,再调用方法toString()把StringBuffer对象转换为String对象。这相当于执行语句:Strings=newStringBuffer(Welcome).append(to).append(Java!).toString();,一StringBuffer类的基本方法与String类类似,StringBuffer类方法很多,下面我们也从初始化与访问方法两个方面加以介绍。1StringBuffer类的初始化StringBuffer类只能用初始化函数对其初始化,如果想按下面语句:StringBuffers=WelcometoJava!;对其初始化,则系统会给出出错信息。StringBuffer的构造函数如表4.3所示。,表4.3StringBuffer类的构造函数,2StringBuffer类的访问方法StringBuffer类的方法主要就是添加字符和插入字符,如表4.4所示。,表4.4StringBuffer类的主要方法,例如:stringBuffersb=newStringBuffer(thisisatestStringBuffer);sb.setLength(14);/sb=thisatestsb.setChar(0,T);/sb=Thisisatestsb.append(5.12);/appendadoublenumbersb.append(true);/appendaBooleannumber,thensb=Thisisatest5.12truesb.insert(14,value=);/sb=Thisisatestvalue=5.12true,4.1.3修改字符串,一修改String类String表示不变字符串,因此不能直接对它的内容进行修改,而是通过生成String类对象的一个拷贝,同时完成对字符串的修改。,32位引用空间,String,abc,32位引用空间,String,abc,abcd,String类提供的方法:concat()replace()substring()toLowerCase()toUpperCase(),二StringBuffer类的修改,StringBuffer类提供的方法:append()insert()setCharAt()如果操作后的字符超出已分配的缓冲区,则系统会自动为它分配额外的空间.,4.1.4字符串的比较,String中提供的方法:equals()和equalsIgnoreCase()它们与运算符=实现的比较是不同的。运算符=比较两个对象是否引用同一个实例,而equals()和equalsIgnoreCase()则比较两个字符串中对应的每个字符值是否相同。,4.1.5字符串的转化,java.lang.Object中提供了方法toString()把对象转化为字符串。,4.1.6字符串“+”操作,运算符+可用来实现字符串的连接:Strings=“Heis”+age+“yearsold.”;其他类型的数据与字符串进行“+”运算时,将自动转换成字符串。,4.2数组,4.2.1一维数组4.2.2二维数组,4.2.1一维数组,一维数组是最简单的数组,在Java中,数组是作为数组类的一个实例来处理的,故可以用new运算符来建立一个数组。由于数组中每一个元素都作为一个单独的对象来考虑,因而必须逐一建立,所以定义的时候,我们必须显式或隐含地指明数组中对象的数目。下面我们分声明和引用两部分来进行介绍。,一、一维数组的声明和初始化数组变量在使用之前要事先声明,其数组元素的类型可分为三类,第一类是Java的基本数据类型;第二类是Java类和接口类型(引用类型);第三类是数组类型。其一般定义格式如下:typearray_Name;或typearray_Name;类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型,例如:intintArray;DatedateArray;intintArray;DatedateArray;,上面两种定义方式完全等价。对C/C+熟悉的读者应该对第一种定义方式并不陌生。例如:intArray1;ObjectArray2;上面所给的例子只是简单的变量声明,并没有给数组分配内存空间。我们在使用数组前还必须对其进行初始化(即为其分配内存空间)。给数组元素分配内存并为数组元素赋初值的过程称为数组初始化。初始化可分为动态初始化和静态初始化。,1静态初始化当数组元素的初始化值直接由括在大括号“”之间的数据给出时,就称为静态初始化。该方法适用于数组的元素不多且初始元素有限时。静态初始化往往和声明结合在一起使用,其格式如下:array_typearray_Name=element1,element2;,其中,array_type为数组元素的类型;array_Name为数组名;element1、element2为array_type类型的数组元素初值;方括号“”表示可选项。例如:intfactorial=1,2,3,4,5,6,7,8;charch=a,A,b,B,c,C;doublef=12,45.12,88.123;intintArray=1,2,3,4;StringstringArray=“abc”,“How”,“you”;,2动态初始化与静态初始化不同,动态初始化先用new操作符为数组分配内存,然后才为每一个元素赋初值。其一般格式如下:array_Name=newarray_typearraySize;其中,array_Name是已定义的数组名;array_type为数组元素的数据类型,必须与定义时给出的数据类型保持一致;arraySize为数组的长度,它可为整型变量或常量。例如:,.intseries=newint4;for(inti=0;i4;i+)seriesi=i*3;.,动态初始化简单类型的数组:intintArray;intArray=newint5;,32位引用空间,intArray,32位,32位,32位,32位,32位,复合类型的数组StringstringArray;stringArray=newString3;/*为数组中每个元素开辟引用空间(32位)*/stringArray0=newString(“How”);stringArray1=newString(“are”);stringArray2=newString(“you”);,32位引用空间,stringArray,32位引用空间,32位引用空间,32位引用空间,How,are,you,二一维数组的引用数组元素的引用方式为:arrayNameindexarrayName为数组名,index为数组下标,数组的下标是一个int类型数,也可以使用与int类型进行自动类型转换的类型,如short、byte、char类型(使用时转换成int类型),但下标不能是long类型的数。如果非得用long类型的数定义数组的下标,则须强制转换。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。,比如:.shorti;bytej;longk;intarray1i,array2j;/noerrorintarray3k;/errorintarray4(int)k;/itsok.,在Java语言中,数组下标从0开始,到数组长度减1结束。任何数组都有公有变量length。我们除了可以在使用时显式指出数组长度之外,也可以使用length这一数组属性。它是只读变量,只可检测,不可赋值,因为数组一旦分配内存后,其长度就不再变化。为了安全考虑,数组的存取在程序运行时实时检查,企图使用小于零或大于数组长度的下标都会引起越界异常(ArrayIndexOutofBoundException)(异常处理我们将在后面的章节中给出)。,例如:.intarray1=newint10;array1-1=100;/error,outofbound.array110=200;/error,outofbound.,publicclassArrayTestpublicstaticvoidmain(Stringargs)inti;inta=newint5;for(i=0;i=0;i-)System.out.println(a+i+=+ai);,一维数组使用举例,Fibonacci(斐波那契)数列F1=F2=1;Fn=Fn-1+Fn-2,publicclassFibonaccipublicstaticvoidmain(Stringargs)inti;intf=newint10;f0=f1=1;for(i=2;i10;i+)fi=fi-1+fi-2;for(i=1;i=10;i+)System.out.println(F+i+=+fi-1);,冒泡排序法对相邻的两个元素进行比较,把数值较小的元素一次交换到前面,publicclassBubbleSortpublicstaticvoidmain(Stringargs)inti,j;intintArray=30,1,-9,70;intl=intArray.length;for(i=0;iintArrayj)intt=intArrayi;intArrayi=intArrayj;intArrayj=t;for(i=0;il;i+)System.out.println(intArrayi+);,4.2.2二维数组,我们在讨论一维数组的时候谈到,数组的元素类型可以为数组,即数组的嵌套,其实,多维数组可以看作是数组的数组。也就是说,多维数组中每个元素为一个低维数组,故多维数组的声明、初始化和引用与一维数组非常相似。由于多维数组中用得较多的还是二维数组,因而我们着重讨论二维数组的属性,其他高维数组可以以此类推。,一二维数组的声明和初始化与一维数组类似,二维数组声明的一般格式如下:array_typearray_Name;或array_typearray_Name;其中,array_type为数组元素类型,可以是任意的数据类型;array_Name为数组名,可以是Java中合法的标识符。上面的定义并没有为数组元素分配内存空间,因而必须经过初始化后才能使用。,例如:intarray1;/定义一个整型二维数组或intarray2;/同样定义一个二维整型数组二维数组在实际的使用过程中也分为静态初始化和动态初始化两种。初始化的过程与一维数组相同,在此不多加理论说明,而只是以初始化实例来加以说明。,1静态初始化实例.intnumber=1,2,3,4,5,6;charch=a,b,c,d,e,f;.上例是在建立数组的同时用大括号中的值给它赋初值,得到了两个二维整型数组和二维字符数组。,二维数组的初始化,静态初始化intintArray=1,2,2,3,3,4,5;,动态初始化,直接为每一维分配空间,格式如下:arrayName=newtypearrayLength1arrayLength2;例如:inta=newint23;,2动态初始化实例.intarray_int=newint33;/定义数组并为其分配存储空间longarray_long=newlong55;.,动态初始化,从最高维开始,分别为每一维分配空间:arrayName=newtypearrayLength1;arrayName0=newtypearrayLength20;arrayName1=newtypearrayLength21;arrayNamearrayLength1-1=newtypearrayLength2n;,动态初始化,必须注意:在Java语言中,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。与一维数组相同,对于复合类型的数组,必须为每个数组元素单独分配空间。,动态初始化,Strings=newString2;s0=newString2;s1=newString2;s00=newString(“Good”);s01=newString(“Luck”);s10=newString(“to”);s11=newString(“You”);,内存分配过程,s,s0,s00,s01,s1,s10,s11,Strings=newString2;,“Luck”,“to”,“You”,Strings0=newString2;,Strings1=newString2;,Strings00=newString(“Good”);,Strings01=newString(“Luck”);,Strings10=newString(“to”);,Strings11=newString(“You”);,“Good”,二二维数组的引用当我们对二维数组进行了初始化后,就可以在程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论