第4章数组与字符串_第1页
第4章数组与字符串_第2页
第4章数组与字符串_第3页
第4章数组与字符串_第4页
第4章数组与字符串_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第4章数组与字符串Java语言程序设计Java语言程序设计第4章数组与字符串本章位置掌握一维数组1掌握二维数组2能力点掌握字符串3第4章数组与字符串Java语言程序设计主要内容1一维数组2多维数组3字符串4案例分析5任务训练Java语言程序设计第4章数组与字符串4.1一维数组数组是一种数据结构,是具有相同数据类型的有序数据集合。Java中的数组由基本数据类型的元素或对象组成。数组中的每个数据称为一个数组元素,同一数组中的各个数组元素具有相同的数据类型,并且在内存中连续存放。数组元素之间通过下标来区分,Java中数组的下标从0开始。Java语言程序设计第4章数组与字符串1.一维数组的声明和变量一样,数组必须先定义。定义一维数组的格式有:数据类型数组名[];或 数据类型[]数组名;其中数据类型可以为Java中的任意数据类型,数组名为一个合法的标识符,[]指明该变量是一个数组类型变量。方括号[]是数组的标志,表示声明的是数组变量而不是普通变量,它可以出现在数组名的后面,也可以出现在数组元素类型名的后面,两种定义方法没有什么差别。例如:intscore[];

//声明了一个名称为score的一维数组,数组元素的数据类型是int。或String[]name;//声明了一个名称为name的一维数组,数组元素的数据类型是String。4.1.1一维数组的声明和创建4.1一维数组第4章数组与字符串Java语言程序设计2.一维数组的创建Java定义数组仅仅指定了数组名和数组元素的类型,[]中并没有指出数组中元素的个数,即数组长度。我们不能访问数组的任何元素。必须用运算符new为数组分配内存空间,指明数组元素的长度,同时对数组元素进行初始化。用运算符new初始化数组格式如下:

数组名=new数据类型[元素个数];如:intscore[];score=newint[5];为整型数组score分配了5个整数元素的内存空间,并使每个元素初值为0。通常,这两部分可以合在一起,用一条语句完成。例如:intscore=newint[5];4.1.1一维数组的声明和创建4.1一维数组第4章数组与字符串Java语言程序设计在创建数组后,数组就具有了默认的初始值,即每个数组元素会自动被赋予其数据类型的默认值。如int型数组的默认初始值为0;double型的默认初始值为0.0;boolean型的默认初始值为false;对象型的默认初始值为null。在实际应用中,很少使用数组默认值,通常需要对每一个数组元素显示地重新赋值,这个过程就是数组的初始化。一维数组赋初值时,由花括号“{}”括起的一串由逗号分隔的表达式组成,逗号“,”分隔数组元素中的值。在语句中不必明确指明数组的长度,系统会自动根据所给的元素个数为数组分配一定的内存空间。语法格式如下:数据类型[]数组名=new数据类型[]{值1,值2,值3,……,值n};或数据类型[]数组名={值1,值2,值3,……,值n};4.1.2一维数组的初始化4.1一维数组Java语言程序设计第4章数组与字符串例如:

intscore[]=newint[]{89,76,88,79,82};或

intscore[]={89,76,88,79,82};创建了一个包含5个整型元素的数组,同时给出了每个元素的初值。一旦数组score被创建,则数组的长度自动设置为5,不能在改变。注意:“{}”里的每一个数组元素的数据类型必须是相同的。当数组元素的值具有明显规律,或者数组长度较长不便于直接给出所有初值时,可以使用for循环来进行初始化。例如,使用for循环对一个整型一维数组a进行初始化,a.length表示数组的长度,代码如下:int[]a=newint[6];for(inti=0;i<a.length;i++){a[i]=i;}4.1.2一维数组的初始化4.1一维数组Java语言程序设计第4章数组与字符串定义了一个数组,并用new操作符为数组分配内存空间,初始化后,就可以引用数组中的每一个元素。通过数组名和数组元素的下标来引用一个数组元素,其语法格式为:数组名[index]其中:index为下标,其值为整型常数或表达式。但下标只能从0开始。对于上例中的score数组来说,它有5个元素,分别为:score[0]、score[1]、score[2]、score[3]、score[4]。

注意:没有score[5]的表示方式。另外Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度。例如:score.length指明数组score的长度。4.1.3一维数组的引用4.1一维数组Java语言程序设计第4章数组与字符串

使用Java数组时需要注意的几个问题:(1)数组元素的下标(即[]内的数字,代表了数组元素在数组中的位置)从0开始,直到数组元素个数减1为止。例如长度为10的数组,其元素下标为0~9。数组的下标必须是整型或者可以转化成整型的量。(2)所有的数组都有一个属性length,这个属性存储了数组元素的个数,利用它可以方便地完成许多操作。(3)Java系统能自动检查是否有数组下标越界的情况。例如数组MyIntArray的长度为10,包含10个元素,下标分别为0~9。如果在程序中使用MyIntArray[10],就会发生数组下标越界,此时Java系统会自动终止当前的流程,并产生一个名为ArrayIndexOutOfBoundsException的例外,通知使用者出现了数组下标越界。避免这种情况的一个有效方法是利用上面提到的length属性作为数组下标的上界。(4)强行使用未初始化的数组,就会出现NullPointException的异常错误。4.1.3一维数组的引用4.1一维数组Java语言程序设计第4章数组与字符串【例4-1】对数组中的每个元素赋值,然后按逆序输出。4.1一维数组Java语言程序设计第4章数组与字符串例【4-2】Fibonacci(斐波那契)数列。Fibonacci数列的定义为:f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2),n>2即斐波那契数列由1开始,之后的斐波那契系数就由之前的两数相加。4.1一维数组Java语言程序设计第4章数组与字符串4.2多维数组

Java语言中并不直接支持多维数组,多维数组被看作数组的数组。例如二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。我们主要介绍二维数组,多维的情况与二维数组类似。Java语言程序设计第4章数组与字符串二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。二维数组的定义方式为:数据类型数组名[][];或数据类型

[][]数组名;例如:intintArray[][];与一维数组一样,这时对数组元素也没有分配内存空间,同样要使用运算符new来分配内存,然后才可以访问每个元素。对高维数组来说,可直接为每一维分配空间,如:inta[][]=newint[2][3];创建了一个二维数组a,该数组的示意图如下:a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]

注意:在使用运算符new来分配内存时,对于多维数组至少要给出最高维的大小。

如果在程序中出现inta2[][]=newint[][];编译器将要提示如下错误:Arraydimensionmissing4.2.1二维数组的定义4.2多维数组第4章数组与字符串Java语言程序设计为数组分配完空间后,需要对数组进行初始化,可以直接为数组元素赋值,例如: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}};又例如:inta[][]={{1},{2,3},{4,5,6}};//定义3行3列二维数组4.2.2二维数组的初始化4.2多维数组第4章数组与字符串Java语言程序设计对二维数组中每个元素,引用方式为:数组名[index1][index2]其中index1、index2为下标,可为整型常数或表达式。同样,每一维的下标都从0开始。4.2.3二维数组的引用4.2多维数组第4章数组与字符串Java语言程序设计【例4-3】初始化二维数组,输出数组长度和每个元素的值。4.2多维数组Java语言程序设计第4章数组与字符串【例4-4】二维数组转置。4.2多维数组Java语言程序设计第4章数组与字符串在Java语言中提供了一些对数组进行操作的类和方法。使用这些系统定义的方法,可以很方便地对数据进行操作。1.System类中的静态方法arraycopy()系统类System中的静态方法arraycopy()可以用来复制数组,其格式为:publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdesPos,intlength)其中,src为源数组名,srcPos为源数组的起始位置,dest为目标数组名,destPos为目标数组的起始位置,length为复制的长度。4.2.4数组的常用方法4.2多维数组第4章数组与字符串Java语言程序设计【例4-5】使用arrayCopy()方法复制数组。4.2多维数组Java语言程序设计第4章数组与字符串2.Arrays类中的方法在java.util.Arrays类中提供了一系列数组操作的方法,下面介绍最常用的两个:(1)判断数组相等方法equals。equals方法用于判断数组是否相等,其格式为:publicstaticbooleanequals(数组1,数组2)数组1和数组2必须是同类型,只有当两个数组的元素个数相同且对应位置元素也相同时,才表示两个数组相同,返回true;否则返回false。(2)指定值分配方法fill。fill方法实现将指定值分配给数组中的每个元素,其格式为:publicstaticvoidfill(数组,值)(3)排序方法sort。sort方法实现对数组的递增排序,其格式为:publicstaticvoidsort(Object[]arrayname)其中,arrayname为要排序的数组名。(4)查找方法binarySearch。该方法的作用是对已排序的数组进行二分查找,其格式为:publicstaticintbinarySearch(Object[]a,Objctkey)其中,a为已排好序的数组,key为要查找的数据。如果找到,返回值为该元素在数组中的位置;如没有找到,返回一个负数。4.2.4数组的常用方法4.2多维数组第4章数组与字符串Java语言程序设计【例4-6】使用equals()方法判断数组。4.2多维数组Java语言程序设计第4章数组与字符串【例4-7】使用fill完成指定值。4.2多维数组Java语言程序设计第4章数组与字符串【例4-8】使用sort方法排序。4.2多维数组Java语言程序设计第4章数组与字符串【例4-9】使用binarySearch方法排序。4.2多维数组Java语言程序设计第4章数组与字符串4.3字符串字符串是编程中经常要使用到的数据结构。它是一个字符序列,可以包含字母、数字、和其它符号。Java提供了两个字符串类String类和StringBuffer类,封装了字符串的全部操作。其中,String用于处理创建后不再改变的字符串,即字符串常量,StringBuffer用来处理可变字符串。Java语言程序设计第4章数组与字符串1.String对象的初始化String是比较特殊的数据类型,不属于基本数据类型,但是可以和使用基本数据类型一样直接赋值,也可以使用new运算符进行实例化。Strings1="abc";Strings2=newString("abc");

注意:字符串常量与字符常量不同。字符常量是用单引号括起的单个字符,例如’a’,’\n’等。而字符串常量是用双引号括起的字符序列,例如"a","Hello"等。2.String类的常用方法String类有很多方法,使用这些方法完成获取字符串长度、字符串比较、字符串连接、字符串截取等。String类的常用方法如下:4.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(1)字符串的长度调用length()方法获得字符串的长度,格式为:字符串名.length()例如: Stringstr="Hello!"; System.out.println(str.length());//64.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(2)字符串比较在比较数字时常用运算符“==”来比较是否相等,但是对于字符串来说,“==”只能判断两个字符串是否为同一个对象(两个对象在内存中存储的地址是否一样),不能判断两个字符串所包含的内容是否相同。1)booleanequals(Stringstr):比较当前字符串内容是否与参数字符串str相同;2)BooleanequalsIgnoreCase(Stringstr):与equals()方法相同,并在比较时忽略字符大小写;3)intcompareTo(Stringstr):按字典顺序与参数指定的字符串比较大小,如果两个字符串相同则返回0;如果当前字符串对象大于参数字符串则返回正值,小于则返回负值,返回值为比较的两个字符串从其到第一对不相同字符间的差距;

4)intcompareToIgnoreCase(Stringstr):与CompareTo()方法相同,并在比较时忽略字符大小写。 Stringstr1="team"; Stringstr2="dream"; System.out.println(str1.equals(str2));//false System.out.println(str1.equalsIgnoreCase("TEAM"));//true System.out.println(pareTo(str2));//16 System.out.println(pareToIgnoreCase(str2));//164.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(3)字符串连接1)用字符串连接操作符“+”将两个字符串连接起来,格式为:字符串1+字符串2例如:Stringstr1=“Welcometo”;Stringstr2=str1+“Java”;//str2的值为“WelcometoJava”2)用concat()方法连接两个字符串,格式为:字符串1.concat(字符串2)

该方法作用是将参数中的字符串2连接到字符串1的后面,字符串1不变。例如:Stringstr1=″Hello!″; System.out.println(str1.concat(″World!″));//Hello!World! System.out.println(str1); // Hello!4.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(4)字符串截取1)publicStringsubstring(intbeginIndex):截取当前字符串从beginIndex处的字符串开始直到最后的子串;2)publicStringsubstring(intbeginIndex,intendIndex):截取从beginIndex位置起至endIndex-1结束的子串。子串返的长度为endIndex-beginIndex。

Stringstr="HelloJavaWorld!"; System.out.print(str.substring(5));//JavaWorld! System.out.print(str.substring(5,9));//Java4.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(5)字符串查询1)publicintindexOf(Stringstr):返回子串str在当前字符串中首次出现的位置,若没有查找到字符串str,则该方法返回值为-1;2)publicintlastIndexOf(Stringstr):返回子串str在当前字符串中最后出现的位置,若没有查找到字符串str,则该方法返回值为-1; Stringstr="HelloJavaWorld!"; System.out.println(str.indexOf("a"));//值为6 System.out.println(str.lastIndexOf("a"));//值为84.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(6)字符串大小写转换1)publicStringtoLowerCase():将字符串中全部字符转换成小写;2)publicStringtoUpperCase():将字符串中全部字符转换成大写。Stringstr1="java";Stringstr2="JSP";StringstrUp=str1.toUpperCase();StringstrLow=str2.toLowerCase();System.out.println(strUp);//值为JAVASystem.out.println(strLow);//值为jsp4.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(7)返回指定位置的字符

publiccharcharAt(intindex):返回字符串中index位置上的字符,index值的范围是0~length-1。Stringstr="12345678";System.out.println(str.charAt(4));//54.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(8)字符串的开始与结尾1)publicbooleanstartsWith(Stringprefix):判断字符串是否以某个字符串作为开始,如果是,则返回true。例如:

Strings="TestGame";

booleanb=s.startsWith("Test");//true2)publicBooleanendsWith(Stringsuffix):判断字符串是否以某个字符串结尾,如果以对应的字符串结尾,则返回true。例如:

Strings="student.doc"; booleanb=s.endsWith("doc");//true4.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(9)替换指定字符串1)publicStringreplace(charc1,charc2):用c2替换字符串中所有指定的字符c1,然后生成一个新的字符串,原字符串不发生改变。

Strings="abcat";

Strings1=s.replace('a','1');//1bc1t2)publicStringreplaceAll(Strings1,Strings2):将字符串中某个指定的字符串s1替换为其它字符串s2,原字符串不发生改变。

Strings="abatbac"; Strings1=s.replace('ba','12');//a12t12c3)publicStringreplaceFirst(Strings1,Strings2):将字符串中某个第一次出现的指定字符串s1替换为其它字符串s2,原字符串不发生改变。

Strings="abatbac"; Strings1=s.replace('ba','12');//a12tbac4.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计(10)去掉字符串首尾空格publicStringtrim():去掉字符串开始和结尾的所有空格,形成一个新的字符串。该方法不去掉字符串中间的空格。

Strings="abcabc123"; Strings1=s.trim();//abcabc123(11)类型转换publicstaticStringvalueOf():将其它数据类型转换为字符串类型。

intn=10; Strings2=String.valueOf(n);//104.3.1数组的常用方法4.3字符串第4章数组与字符串Java语言程序设计Java中提供了java.lang包中的StringBuffer类,用于创建和操作动态字符串。该类对象值可变,分配的内存可自动扩展。创建StringBuffer类的对象使用new运算符创建StringBuffer类的对象,其语法格式如下:StringBuffer()//创建一个空字符串对象,初始容量是16个字符StringBuffer(intcapcity)//创建一个长度为capcity的空字符串对象StringBuffer(Strings)//创建一个内容为s的字符串对象2.StringBuffer类的常用方法StringBuffer类的常用方法如下:(1)字符追加方法名:StringBufferappend(Stringstr)功能:将指字符串str连接到StringBuffer对象的内容后面,并返回连接后的StringBuffer对象。(2)插入字符方法名:StringBufferinsert(intindex,Stringstr)功能:将指定字符串str插入到StringBuffer对象的index索引处。(3)删除字符方法名:StringBufferdelete(intstart,intend)功能:删除该StringBuffer对象从start索引处开始到end-1索引处结束的字符内容。(4)反转字符方法名:StringBufferreverse()功能:反转该StringBuffer对象的字符串值。4.3.2StringBuffer类4.3字符串第4章数组与字符串Java语言程序设计【例4-10】StringBuffer的使用。4.3字符串第4章数组与字符串Java语言程序设计程序从外界读取数据时,读入的数据往往是一个长串,需要把长串的数据分界开来。如给多人发送电子邮件,邮件的接收人地址形如:person1@163.com;person2@163.com;person3@163.com。利用StringTokenizer类可以方便地去除每一个邮件地址的值。StringTokenizer类放在java.util包中,需要用import关键字。StringTokenizer类默认会用5个符号当做字符串的分解符号,这5个符号分别是空格、定位(Tab,\t)、换行(\n)、回车(\r)和进纸(\f)。1.StringTokenizer类的初始化StringTokenizer类有下面两个常用的构造方法。StringTokenizer(Strings):用于为字符串s构造一个分析器。StringTokenizer(Strings,Stringdelim):用于为字符串s构造一个分析器,参数delim中的字符被作为分隔符。4.3.3StringTokenizer类4.3字符串第4章数组与字符串Java语言程序设计2.StringTokenizer类的常用方法StringTokenizer类的常用方法有如下几个:countTokens():返回StringTokenizer类包含的元素个数。hasMoreElements():判断是否还有更多元素。hasMoreTokens():判断是否还有更多元素。nextElement():返回StringTokenizer类的下一个元素(对象)。nextToken():返回StringTokenizer类的下一个字符串。通常把StringTokenizer对象作为一个字符串分析器。一个分析器可以使用nextToken()方法逐个获取字符串中的语言符号。每当调用nextToken()时,都将在字符串中获得下一个语言符号,每获得一个语言符号,字符串分析器中负

温馨提示

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

评论

0/150

提交评论