Jave培训:数组及字符处理.ppt

上传人:仙人指路1688 文档编号:2528647 上传时间:2023-02-20 格式:PPT 页数:47 大小:157.50KB
返回 下载 相关 举报
Jave培训:数组及字符处理.ppt_第1页
第1页 / 共47页
Jave培训:数组及字符处理.ppt_第2页
第2页 / 共47页
Jave培训:数组及字符处理.ppt_第3页
第3页 / 共47页
Jave培训:数组及字符处理.ppt_第4页
第4页 / 共47页
Jave培训:数组及字符处理.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《Jave培训:数组及字符处理.ppt》由会员分享,可在线阅读,更多相关《Jave培训:数组及字符处理.ppt(47页珍藏版)》请在三一办公上搜索。

1、第四讲 数组及字符处理,1、数组(Array)2、字符处理(String),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 intArray=1,2,3,4;/定义了一个含有4个/元素的int型数组。,1、数组一维数组:初

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

4、ay=new String3;/给数组stringArray分配3个应用/空间,初始化每个引用值为nullstringArray0=new String(“how”);stringArray1=new String(“are”);stringArray2=new String(“you”);,初始化各数组元素,1、数组一维数组:初始化,当定义了一个数组,并用运算符new为它分配了内存空间后,就可以引用数组中的每一个元素了。元素的引用方式为:arrayNameindex index为数组下标,可以是整型常数或表达式,如:arrayName1,arrayNamei,arrayName6*i等。下标

5、是0序的,即从0开始,一直到数组长度减1。,1、数组一维数组:引用,另外,与C、C+中不同,Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。,1、数组一维数组:边界检查,public class ArrayTest public static void main(String args)int i;int a=new int5;for(i=0;i=0;i-)System.out.println(a+i+=+ai);,该程序对数组中的每个元素赋值,然后按逆序输出。,1、数组一

6、维数组:示例,运行结果为:C:java ArrayTest a4=4a3=3 a2=2 a1=1a0=0,1、数组一维数组:示例,在任何语言中,多维数组都被看作数组的数组。比如二维数组是一个特殊的一维数组,其每一个元素又是一个一维数组。我们主要以二维数组为例来说明,高维数组与此类似。,1、数组多维数组,二维数组的定义方式 type arrayName;例如:int intArray;也可以采用另一种定义方式:type arrayName;与一维数组一样,这时对数组元素也没有分配内存空间,同样要使用运算符new来分配内存,然后才可以访问每个元素。,1、数组二维数组:定义,二维数组的初始化也分为静

7、态和动态两种。静态初始化:在定义数组的同时为数组分配空间。int intArray=1,2,2,3,3,4;不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。,1、数组二维数组:初始化,动态初始化:对高维数组来说,分配内存空间有下面两种方法:1.直接为每一维分配空间,如:type arrayName=new typearraylength1arraylength2例如:int a=new int23;,1、数组二维数组:初始化,2.从最高维开始(而且必须从最高维开始),分别为每一维分配空间,如:String s=new String2;s0=new Str

8、ing2;s1=new String3;s00=new String(“Good”);s01=new String(“Luck”);s10=new String(“to”);s11=new String(“you”);s12=new String(“!”);,1、数组二维数组:初始化,二维数组的引用 对二维数组中每个元素,引用方式为:arrayNameindex1index2 其中index1和index2为数组下标,为整型常数和表达式,都是0序的。二维数组举例 两个矩阵相乘,参照参考书在课余时间上机练习。,1、数组二维数组:引用及示例,数组是用来表达一组同类型数据的数据结构在Java中数组是

9、定长的,数组的大小不会动态变化数组变量的值是数组对象实例的引用在java.util包中的Arrays类提供了一些操作数组的方法在java.util包中的Vector提供了动态变长数组的功能,Vector的容量可以随着需要变化,1、数组java.util.Arrays,int binarySearch(type a,type key)数组a必须已经排序,否则返回值无意义当数组a中有重复的值时,该方法返回的值不确定如果key存在,则返回它在数组a中的位置如果不存在,则返回它的“-(插入位置-1)”void fill(type a,type val)void fill(type a,int from

10、Indx,int toIndex,type val)包括afromIndx,但不包括atoIndexfromIndx=toIndex时,范围是一个空的范围,1、数组java.util.Arrays,boolean equals(type a,type a2)两个数组大小相同,并且每一个元素相等两个null数组是相等的,1、数组java.util.Arrays,void sort(type a)void sort(type a,int fromIndx,int toIndex)void sort(type a,Comparatorc)void sort(type a,int fromIndx,i

11、nt toIndex,Comparatorc)包括afromIndx,但不包括atoIndexfromIndx=toIndex时,范围是一个空的范围排序算法都具有n*log(n)的计算复杂性,效率高排序算法都保证稳定,即排序算法不会改变相等元素的顺序对不同类型的数组,算法的实现并不完全相同可以用自己的Comparator对象声明自定义的顺序,1、数组java.util.Arrays,java.lang.Systemvoid arraycopy(Objectsrc,intsrc_position,Objectdst,intdst_position,intlength)范围不能越界可对任何同类型的

12、数组进行复制数组复制过程中做严格的类型检查更详细的内容参见JDK文档,1、数组数组的复制,3、字符串,字符串是字符的序列,它是组织字符的基本数据结构,从某种程度上来说有些类似于字符的数组。在Java中,字符串被当作对象来处理。程序中需要用到的字符串可以分为两大类,一类是创建之后不会再做修改和变动的字符串常量;另一类是创建之后允许再做更改和变化的字符串变量。对于字符串常量,由于程序中经常需要对它做比较,搜索之类的操作,所以通常把它放在一个具有一定名称的对象之中,由程序对该对象完成上述操作。在Java中,存放字符串常量的对象用String类,对于字符串变量,由于程序中经常需要对它做添加,插入,修改

13、等操作,一般存放在StringBuffer类的对象中。,3、字符串String,字符串常量使用双引号括住的一串字符,比如:Hello world!Java编译器自动为每一个字符串常量生成一个String类 的实例,因此可以用字符串常量直接初始化一个String对 象,如:String s=Hello world!;,要创建类String的一个对象并进行初始化,需要调用类String的构造方法。类String中提供了下面的一些构造方法:String():无参数的缺省的构造方法用来创建一个空串。String s=new String();String(String value):利用已经存在的字符

14、串常量创建一个新的String对象,该对象的内容与给出的字符串常量一致。String s=new String(“hello”);String(char value):通过给构造方法传递一个字符数组可以创建一个非空串。char chars=a,b,c;String s=new String(chars);,3、字符串String:创建,String(char,int startIndex,int numChars):这种方法用来创建一个非空串,并且指明所创建的字符串在字符数组中的起始地址以及所包含的字符个数。char chars=a,b,c,d,e,f;String s=new String(

15、chars,2,3);该方法生成的串s为“cde”。(注意数组的下标从0开始),3、字符串String:创建,String(byte mybyte,byte hibyte):因为在Internet上,格式采用八位的ASCII码,所以Java的类String提供了从byte型数组进行初始化的构造方法。其中hibyte指明各字符的高位字节,对于通常所用的ASCII码,必须将高位字节声明为零,而其他的非拉丁文字符则置为非零。byte mybyte=97,98,99;String s=new String(mybyte,0);该方法构造的字符串s是“abc”。,3、字符串String:创建,Strin

16、g(byte mybyte,byte hibyte,int startIndex,int numChars):这种构造方法与String(char,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对象初始化。,3、字符串String:创建,1.length pub

17、lic int length()此方法返回字符串的字符个数,如:String s=abc;System.out.println(s.length();则将显示字符个数为3。,3、字符串String:基本方法,2.charAt public char charAt(int index)该方法返回字符串中index位置上的字符,其中index值的范围是0length-1。3.getChars如果要从字符串中提取一个以上的字符,则可以用此方法:public void getchars(int srcbegin,int end,char buf,int dstbegin)其中,srcbegin为要提取

18、的第一个字符在源串中的位置,end为要提取的最后一个字符在源串中的位置,字符数组buf存放目的字符串,dstbegin为提取的字符串在目的串中的起始位置。,3、字符串String:基本方法,4.getbytespublic void getbytes(int srcbegin,int end,byte byt,int dstbegin)类似于上一个方法,只是串中的字符均用8位表示,参数及用法同上。5.indexOf和lastIndexOf为了在给定的字符串中检索特定的字符或子串,类String提供了上面两种方法,并通过方法重写更方便的处理这类问题。这两种方法中,如果查找成功,则返回匹配成功的字

19、符的位置,如果没有查找到,则都返回-1。int indexOf(int ch)int lastIndexOf(int ch)返回字符ch在字符串中出现的第一个和最后一个位置。,3、字符串String:基本方法,int indexOf(String str)int lastindexOf(String str)返回子串str中第一个字符在字符串中出现的始末位置。int indexOf(int ch,int fromIndex)int lastIndexOf(int ch,int fromIndex)返回字符ch在字符串中位置fromIndex以后出现的始末位置。int indexOf(Strin

20、g str,int fromIndex)int lastIndexOf(String str,int fromIndex)返回子串str中的第一个字符在字符串中位置fromIndex以后出现的始末位置。,3、字符串String:基本方法,6.在Java中,运算符“”可以用来实现字符串的连接,如:String s=“He is”+age+“years old.”假设整数型变量age的值为15,那么,s的值为“He is 15 yearsOld”。pareTopublic int compareTo(String str)该方法按字典次序比较两个字符串的大小,如果源串较小,则返回一个小于0的值,如

21、相等则返回0,否则返回一个大于0的值。,3、字符串String:基本方法,8.regionMatchesboolean regionMatches(int toffset,String other,int ooffset,int len)boolean regionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len)上述两个方法都是用来进行模式匹配的,匹配成功则返回true,否则返回false。其中,toffset和ooffset分别指明当前字符串和参数字符串中所要比较的子串的起始索引位置,len指明比

22、较的长度,而ignoreCase指明比较时是否区分大小写。对于第一种方法,比较是区分大小写的。Ex:regionMatches(2,abcdef,2,3),此时“cde”为模式,与indexOf相似。,3、字符串String:基本方法,9.equals和equalsIgnoreCasepublic boolean equals(object str)public boolean equalsIgnoreCase(object str)判断两个字符串是否相等,则可以用此方法。相等则返回 true,不等则返回false,两种方法的区别在于 equalsIgnoreCase不区分字母大小写,而equ

23、als则须区分。10.其他方法public String concat(String str);将当前字符串对象与给定的字符串str连接起来。,3、字符串String:基本方法,public String replace(char oldChar,char newChar)将串中出现的特定字符用新的字符代替。public String substring(int beginIndex)public String substring(int beginIndex,int endIndex)用来得到字符串中指定范围内的子串。public String toLowerCase()把串中的所有字符转换

24、成小写public String toUpperCase()把串中的所有字符转换成大写,3、字符串String:基本方法,class StringCopyModify public static void main(String args)String s=new String(We will go further to modify a String by copy!);System.out.println(From String+s+);String sub1=s.substring(20);String sub2=s.substring(0,19);System.out.println(

25、“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 two sub string into one:n+cons);,3、字符串String:示例,运行结果为:,From String“We will go further to modify a String by copy”Get a sub string

26、from index 20 to the end:to modify a String by copyGet a sub string from index 0 to 19:We will go furtherConcat two sub strings into one:We will go further to modify a String by copy,可见,通过拷贝得到新的字符串是并不改变原字符串的值。,3、字符串String:示例,StringBuffer()建立一个空串的缓冲区,长度为16。StringBuffer(int length)建立一个长度为length的空串缓冲区。

27、StringBuffer(String str)初始化缓冲区内容为给定的字符串str,并提供另16个字符的空间供再次分配。类似于Vector,3、字符串StringBuffer:创建,除了方法length(),charAt(),getChars()以外,还有以下几种方法。1.capacity public int capacity()此方法返回字符串缓冲区的长度,即总的可供分配的字符个数。,3、字符串StringBuffer:基本方法,class demoOfStringBuffer public void main(String buf)StringBuffer sb=new StringB

28、uffer(abc);System.out.println(buffer=+sb);System.out.println(length=+sb.length()System.out.println(capacity=+sb.capacity();,从运行结果我们可以看到为附加处理保留了空间。注意:capacity()与length()的区别。,C:java demoOfStringBuffer buffer=abclength=3capacity=19,2.append public synchronized StringBuffer append(对象类型 对象名)append方法将指定的参

29、数对象转化成字符串,附加在原来的字符串对象之后。3.insert public synchronized StringBuffer insert(int 插入位置,对象类型 对象名)在指定的位置插入给出的参数对象所转化而得的字符串。,3、字符串StringBuffer:基本方法,4.setChatAt()public synchronized void setCharAt(int index,char ch)用来设置指定索引index位置的字符值。5.setLength public synchronized void setLength(int newLength)如果希望明确地定义字符缓冲

30、区的长度,则可以用此方法。如果newlength大于现在的长度,串尾将补0,如果小于,那么newlength后的字符将丢失。,3、字符串StringBuffer:基本方法,1.C/C+的字符串只是简单的以零字符结尾的字符数组,而Java中,字符串是一个封装的对象,这种处理对于编程者提供了许多有利之处。2.C/C+中可以通过指针直接对字符串所在的内存地址进行操作,并且不对越界情况进行检查,Java中只能通过类String或StringBuffer所提供的接口对字符串进行操作,并且要对越界情况进行检查并报告,这样大大增加了安全性。3.由于类String和StringBuffer的接口都经明确说明,

31、所以我们可以预知Java中字符串处理的功能;而在C/C+中,只有通过库函数或者自定义函数对字符串进行处理。,3、字符串Java与C/C+处理字符串的差别,字符类,支持字符的相关操作作为基本数据类型char的包装类提供了一些关于char常量的定义提供了变换大小写的方法参见JDK文档,3、字符串Charactor,从一个字符串析取子字符串构造方法StringTokenizer(Stringstr)/缺省分隔符,为空格StringTokenizer(Stringstr,Stringdelim)/指定分隔符StringTokenizer(Stringstr,Stringdelim,booleanret

32、urnDelims)int countTokens():返回Token的数目boolean hasMoreTokens():是否还有下一个TokenString nextToken():返回下一个TokenString nextToken(Stringdelim):改变分隔符,从当前位置处,继续返回下一个Token。,3、字符串StringTokenizer,StringTokenizer st=new StringTokenizer(this is a test);while(st.hasMoreTokens()println(st.nextToken();输出结果为:thisisatest,3、字符串StringTokenizer,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号