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

下载本文档

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

文档简介

1、Java语言程序设计,第四章 数组与字符串,1、数组 一维数组:说明,一维数组的说明方式为: type arrayName ; 其中类型(type)可以为Java中任意的数据类型,包 括简单类型和组合类型,数组名arrayName为一个 合法的标识符, 指明该变量是一个数组类型变量。 例如: int intArray ; 声明了一个整型数组,数组中的每个元素为整型数据。,我们还可以定义一个复合类型的数组,例如: Date dateArray ; 声明了一个容纳复合数据类型Date的数组。 与C、C+不同,Java在数组的说明中并不为数组元素分配内存,因此 中不用指出数组中元素的个数,即数组长度

2、,而且对于如上说明的一个数组是不能访问它的任何元素的。必须经过初始化后,才能应用数组的元素。,1、数组 一维数组:说明,除了这种说明数组的方式之外,java语言还提供了其他的说明形式,如下所示: type arrayName; 对于以上举出的例子,我们也可以这样定义: int intArray; Date dateArray;,1、数组 一维数组:说明,一旦说明了数组变量,便可定义它能引用的数组。 int primes; primes=new int10; 这条语句建立了能存储10个int型值的数组,并且在primes变量中纪录了对数组的引用。该引用即数组在内存中的位置或地址。,1、数组 一维

3、数组:定义数组,注意: 对数组的说明(declaration)只是定义变量名,没有为数组本身分配任何存储空间,同时也没有定义元素的个数。 语句 int primes=new int10; 是对primes这个数组变量的声明,也是对该数组的定义(definition),1、数组 一维数组:定义数组,数组变量和数组本身是分离开的 int primes=new int10; primes=new int50;,1、数组 重用数组变量,一维数组说明之后,必须经过初始化才可以引用。数组的初始化分为静态初始化和动态初始化两种: 静态初始化:在定义数组的同时对数组元素进行初始化,例如: int intArr

4、ay =1,2,3,4;/定义了一个含有4个元素的int型数组。,1、数组 一维数组:初始化,动态初始化:使用运算符new为数组分配空间,对于简 单类型的数组,其格式如下: type arrayName =new typearraySize; type arrayName=new typearraySize; 对于复合类型的数组,需要经过两步空间分配。 首先: type arrayName =new typearraySize; 然后:arrayName0=new type(paramList); arrayNamearraySize-1=new type(paramList);,1、数组 一

5、维数组:初始化,例如: String stringArrar; /定义一个String类型的数组 stringArray = new String3; /给数组stringArray分配3个引用 初始化每个引用值为null stringArray0=new String(“how”); stringArray1=new String(“are”); stringArray2=new String(“you”);,初始化各数组元素,1、数组 一维数组:初始化,0,编程者也能用现有的数组初始化数组。 long even=2L,4L,6L,8L,10L; long value=even;,1、数组

6、一维数组:初始化,Even0,Even1,Even2,Even3,Even4,Value0,Value1,Value2,Value3,Value4,even,value,Double inputArray=new double100; Double outputArray=new double100; Double temp; temp= inputArray; inputArray=outputArray; outputArray= temp;,1、数组 一维数组:初始化,当定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。元素的引用方式为: arrayN

7、ameindex index为数组下标,可以是整型常数或表达式,如:arrayName1, arrayNamei, arrayName6*i等。下标是0序的,即从0开始,一直到数组长度减1。 数组实例,1、数组 一维数组:访问数组元素,另外,与C、C+中不同,Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,例如: intArray.length指明数组intArray的长度。,1、数组 一维数组:边界检查,int e; /仅声明 int f = new int5; /仅创建,未初始化各元素,缺省为0 int g = new int4; fo

8、r(int i = 0; i g.length; i+) gi = i*i; /创建数组,之后初始化各元素 int h = 11, 47, 93 ; /创建数组同时初始化,在任何语言中,多维数组都被看作数组的数组。比如二维数组是一个特殊的一维数组,其每一个元素又是一个一维数组。我们主要以二维数组为例来说明,高维数组与此类似。,1、数组 多维数组,二维数组的声明方式 type arrayName ; 例如: int intArray ; 也可以采用另一种声明方式: type arrayName; 与一维数组一样,这时对数组元素也没有分配内存空间,同样要使用运算符new来分配内存,然后才可以访问每

9、个元素。,1、数组 二维数组:声明,*创建多维数组时,最高维的长度不能省略,其它的维数从低向高省略 int D = new int 8; int D = new int 4; int D = new int 24;,X,X,1、数组 二维数组:定义,二维数组的初始化也分为静态和动态两种。 静态初始化:在定义数组的同时为数组分配空间。 int intArray =1,2,2,3,3,4; 不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。,1、数组 二维数组:初始化,动态初始化:对高维数组来说,分配内存空间有下面两种方法: 1.直接为每一维分配空间,如: t

10、ype arrayName =new typearraylength1arraylength2 例如: int a =new int23;,1、数组 二维数组:初始化,2.从最高维开始(而且必须从最高维开始),分别为每一维分配空间,如: String s =new String2 ; s0=new String2; s1=new String3; s00=new String(“Good”); s01=new String(“Luck”); s10=new String(“to”); s11=new String(“you”); s12=new String(“!”);,1、数组 二维数组:初

11、始化,二维数组的引用 对二维数组中每个元素,引用方式为: arrayNameindex1index2 其中index1和index2为数组下标,为整型常数和表达式,都是0序的。,1、数组 二维数组:引用及示例,Char message=new char50; 或 char vowels=a,b,c,d,e; 字符数组实例,1、数组 字符数组,2、字符串,字符串是字符的序列,它是组织字符的基本数据结构,从某种程度上来说有些类似于字符的数组。在Java中,字符串被当作对象来处理。程序中需要用到的字符串可以分为两大类,一类是创建之后不会再做修改和变动的字符串常量;另一类是创建之后允许再做更改和变化的

12、字符串变量。对于字符串常量,由于程序中经常需要对它做比较,搜索之类的操作,所以通常把它放在一个具有一定名称的对象之中,由程序对该对象完成上述操作。 在Java中,存放字符串常量的对象用String类,对于字符串变量,由于程序中经常需要对它做添加,插入,修改等操作,一般存放在StringBuffer类的对象中。,2、字符串 String,字符串常量使用双引号括住的一串字符,比如: Hello world! Java编译器自动为每一个字符串常量生成一个String类 的实例,因此可以用字符串常量直接初始化一个String对 象,如: String s=Hello world! ;,要创建类Stri

13、ng的一个对象并进行初始化,需要调用类 String的构造方法。类String中提供了下面的一些构造方法: String( ):无参数的缺省的构造方法用来创建一个空串。 String s = new String( ); String( String value):利用已经存在的字符串常量创建一个 新的String对象,该对象的内容与给出的字符串常量一致。 String s=new String(“hello”); String( char value ):通过给构造方法传递一个字符数组 可以创建一个非空串。 char chars = a , b , c ; String s = new St

14、ring( chars ) ;,2、字符串 String:创建,String( char , int startIndex, int numChars ):这种方法用来 创建一个非空串,并且指明所创建的字符串在字符数组中的起 始地址以及所包含的字符个数。 char chars = a , b , c , d , e , f ; String s = new String ( chars , 2 , 3 ); 该方法生成的串s为“cde”。(注意数组的下标从0开始),2、字符串 String:创建,String( byte mybyte, byte hibyte ):因为在Internet上,格

15、式采用八位的ASCII码,所以Java的类String提供了从byte型数组进行初始化的构造方法。其中hibyte指明各字符的高位字节,对于通常所用的ASCII码,必须将高位字节声明为零,而其他的非拉丁文字符则置为非零。 byte mybyte = 97 , 98 , 99 ; String s = new String( mybyte , 0 ); 该方法构造的字符串s是“abc”。 例子,2、字符串 String:创建,String( byte mybyte, byte hibyte , int startIndex , int numChars ): 这种构造方法与String(char

16、 ,int startIndex,int numChars) 类似,只是初始化的数组类型不同。 byte mybyte = 80 , 81, 82, 83, 84, 85 ; String s = new String ( mybyte , 0, 2, 3 ); 该方法构造的字符串s是“RST”。 String(StringBuffer buffer):这个构造函数利用一个已经存 在的StringBuffer对象为新建的String对象初始化。,2、字符串 String:创建,1. length public int length( ) 此方法返回字符串的字符个数,如: String s =

17、abc; System.out.println( s.length( ) ); 则将显示字符个数为3。 例子,2、字符串 String:基本方法,2. charAt public char charAt (int index ) 该方法返回字符串中index位置上的字符,其中index值的范围是0length-1。 例子,2、字符串 String:基本方法,3. indexOf和lastIndexOf 为了在给定的字符串中检索特定的字符或子串,类String提供了上面两种方法,并通过方法重写更方便的处理这类问题。这两种方法中,如果查找成功,则返回匹配成功的字符的位置,如果没有查找到,则都返回

18、-1。 int indexOf ( char ch) int lastIndexOf ( char ch) 返回字符ch在字符串中出现的第一个和最后一个位置。 例子,2、字符串 String:基本方法,int indexOf(String str) int lastindexOf(String str) 返回子串str中第一个字符在字符串中出现的始末位置。 例子 int indexOf ( char ch, int fromIndex) int lastIndexOf ( char ch, int fromIndex) 返回字符ch在字符串中位置fromIndex以后出现的始末位置。 例子 i

19、nt indexOf (String str,int fromIndex) int lastIndexOf (String str , int fromIndex) 返回子串str中的第一个字符在字符串中位置fromIndex 以后出现的始末位置。 例子,2、字符串 String:基本方法,4. 在Java中,运算符“”可以用来实现字符串的连接,如: String s = “He is” + age + “years old.” 假设整数型变量age的值为15,那么,s的值为 “He is 15 yearsOld”。 5. compareTo public int compareTo ( St

20、ring str ) 该方法按字典次序比较两个字符串的大小,如果源串较小,则返回一个小于0的值,如相等则返回0,否则返回一个大于0的值。 例子,2、字符串 String:基本方法,6. regionMatches boolean regionMatches ( int toffset , String other , int ooffset , int len ) boolean regionMatches ( boolean ignoreCase , int toffset , String other , int ooffset , int len ) 上述两个方法都是用来进行模式匹配的,

21、匹配成功则返回 true,否则返回false。其中,toffset和ooffset分别指明当前字符串和参数字符串中所要比较的子串的起始索引位置,len指明比较的长度,而ignoreCase指明比较时是否区分大小写。对于第一种方法,比较是区分大小写的。 Ex:regionMatches(2, abcdef, 2, 3), 此时“cde”为模式,与indexOf相似。,2、字符串 String:基本方法,7. equals和equalsIgnoreCase public boolean equals( object str) public boolean equalsIgnoreCase( obj

22、ect str ) 判断两个字符串是否相等,则可以用此方法。相等则 返回 true,不等则返回false,两种方法的区别在于 equalsIgnoreCase不区分字母大小写,而equals则须区分。 例子 10.其他方法 public String concat(String str); 将当前字符串对象与给定的字符串str连接起来。,2、字符串 String:基本方法,public String replace(char oldChar,char newChar) 将串中出现的特定字符用新的字符代替。 public String substring(int beginIndex) publ

23、ic String substring(int beginIndex,int endIndex) 用来得到字符串中指定范围内的子串。 public String toLowerCase() 把串中的所有字符转换成小写 public String toUpperCase() 把串中的所有字符转换成大写,2、字符串 String:基本方法,class StringCopyModify public static void main(String args ) String s = new String(We will go further to modify a String by copy! )

24、; System.out.println(From String + s + ); String sub1 = s.substring(20); String sub2 = s.substring(0,19); System.out.println(“Get a sub string from index 20 to the end:+ sub1); System.out.println(“Get a sub string from index 0 to 19: + sub2); String cons=sub2.concat(sub1); System.out.println(“Concat

25、 two sub string into one:n + cons); ,2、字符串 String:示例,运行结果为:,From String “We will go further to modify a String by copy” Get a sub string from index 20 to the end:to modify a String by copy Get a sub string from index 0 to 19:We will go further Concat two sub strings into one: We will go further to m

26、odify a String by copy,2、字符串 String:示例,String对象不能被改变,StringBuffer对象可直接改变。 StringBuffer( ) 建立一个空串的缓冲区,长度为16。 StringBuffer ( int length) 建立一个长度为length的空串缓冲区。 StringBuffer ( String str) 初始化缓冲区内容为给定的字符串str,并提供另16个字符的空间供再次分配。 StringBuffer sb=new StringBuffer(“小明是一个优秀的学生); StringBuffer sb=“小明是一个优秀的学生”; St

27、ring sb=“小明是一个优秀的学生”;,2、字符串 StringBuffer:创建,缓冲区的长度指的是StringBuffer对象的容量。 StringBuffer sb=new StringBuffer(小明是一个优秀); Int thelength=sb.length();,2、字符串 StringBuffer:容量,除了方法length(),charAt(),getChars()以外,还有以下几种方法。 1. capacity public int capacity( ) 此方法返回字符串缓冲区的长度,即总的可供分配的字符个数。,2、字符串 StringBuffer:基本方法,cla

28、ss demoOfStringBuffer public void main (String buf ) StringBuffer sb = new StringBuffer (abc); System.out.println (buffer= + sb ); System.out.println (length= + sb.length() System.out.println ( capacity= + sb.capacity(); ,从运行结果我们可以看到为附加处理保留了空间。 注意:capacity()与length()的区别。,C:java demoOfStringBuffer buffer=abc length=3 capacity=19,2 改变StringBuffer对象的长度 setLength() 减少对象的长度,字符串将被截断;增加长度时,附加的字符将包含u0

温馨提示

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

评论

0/150

提交评论