已阅读5页,还剩91页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第3章字符串、数组和向量,任务,从一个带有路径的文件名中分离出文件名和路径,C:ProgramFilesJdkreadme.html,字符串,在Java中,字符串被当作对象来处理。字符串分类字符串常量创建之后不能再修改。用String类来创建字符串常量。字符串变量创建之后可以做修改。一般用StringBuffer类来创建。,String类和StringBuffer类都在java.lang包中。,类String字符串定义,可以用字符串常量直接初始化一个String对象Strings=HelloWorld;通过构造方法,charchars=a,b,c;Strings=newString(chars);,Strings=newString(“hello”);或:Strings=“hello”;,Strings=newString();,bytebytestr=97,98,99;Strings=newString(bytestr);,字符串变量和普通变量的区别,String构造方法的使用举例,publicstaticvoidmain(Stringargs)Strings,s1,s2,s3,s4,s5,s6,s7;bytebyteArray=(byte)J,(byte)a,(byte)v,(byte)a;charcharArray=程,序,设,计,课,程;StringBuffersb=newStringBuffer(欢迎);s=newString(Hello!);s1=newString();s2=newString(s);s3=newString(sb);s4=newString(charArray);s5=newString(charArray,2,4);s6=newString(byteArray);s7=newString(byteArray,0,1);,Hello!Hello!欢迎程序设计课程设计课程JavaJ,字符串,长度,由length()方法确定,语法,publicintlength();,返回字符串中的字符数,String的常用方法字符串长度,Stringname=JohnSmith;System.out.println(name.length();,String的常用方法字符串比较,字符串变量1,字符串变量2,字符串变量1,字符串变量2,由equals()方法确定,检查字符串变量指向的字符串是否相等,同一个对象,用=运算符检查,检查字符串变量是否指向同一个字符串对象,publicclassStringComparepublicstaticvoidmain(Stringargs)Strings1=abc;Strings2=abcd;System.out.println(s1=s2);System.out.println(s1.equals(s2);Stringt1=newString(abc);Stringt2=newString(abc);System.out.println(t1=t2);System.out.println(t1.equals(t2);Stringt3=t1;System.out.println(t1=t3);System.out.println(t1.equals(t3);,字符串比较举例,程序运行结果如下:falsefalsefalsetruetruetrue,字符串比较方法,字符串连接,在Java中,运算符“”可以用来实现字符串的连接,如:Strings=“Heis”+age+”yearsold.”假设整数型变量age的值为15,那么,s的值为“Heis15yearsold”。,搜索字符和字符串,搜索字符和字符串,搜索字符串举例_判断邮箱正确性,publicclassSearchStringpublicstaticvoidmain(Stringargs)Stringname=JohnSmith;System.out.println(“EmailID是:+name);System.out.println(“的索引是:+name.indexOf();System.out.println(“.的索引是:+name.indexOf(.);if(name.indexOf(.)name.indexOf()System.out.println(“该电子邮件地址有效);elseSystem.out.println(“该电子邮件地址无效);,邮箱格式:XXXXXX.com判断:应该在.之前,字符串提取、连接、替换等方法,字符串应用举例,publicclassStringMethodspublicstaticvoidmain(Stringargs)Strings1=Helloworld;Strings2=Hello;System.out.println(s1.substring(3,8);System.out.println(s2.concat(World);System.out.println(s2.replace(l,w);System.out.println(s1.trim();,lowoHelloWorldHewwoHelloworld,更改字符大小写方法,Hello,使用toUpperCase()方法,HELLO,HELLO,使用toLowerCase()方法,hello,语法,publicStringtoUpperCase();,语法,PublicStringtoLowerCase();,更改字符大小写方法举例,publicclassStringTestpublicstaticvoidmain(Stringargs)Stringname=newString(George);System.out.println(“姓名是+name);intlength=name.length();System.out.println(“姓名的长度为”+length+“个字符);System.out.println(“姓名用大写形式表示为:);StringnameUppercase=name.toUpperCase();System.out.println(nameUppercase);,任务实现:分离文件名和路径,publicclassGetFilenameprivateStringfullPath;privatecharpathSepatator=;publicGetFilename(Stringfname)fullPath=fname;publicStringgetName()intpos=fullPath.lastIndexOf(pathSepatator);if(pos=-1)returnfullPath;elsereturnfullPath.substring(pos+1);publicStringgetPath()intpos=fullPath.lastIndexOf(pathSepatator);if(pos=-1)returnfullPath;elsereturnfullPath.substring(0,pos);publicstaticvoidmain(Stringargs)GetFilenamefn=newGetFilename(F:avamyexamplea.java);System.out.println(fn.getName();System.out.println(fn.getPath();,C:ProgramFilesJdkreadme.html,字符串与基本数据的相互转化,各种基本数据类型与String类型之间可以通过方法相互转换。String类中的valueOf()系列方法用于从基本数据类型转换成字符串。publicstaticStringvalueOf(Booleanb)publicstaticStringvalueOf(charc)publicstaticStringvalueOf(inti)publicstaticStringvalueOf(longl)publicstaticStringvalueOf(floatf)publicstaticStringvalueOf(doubled),将字符串转化为基本数据类型Java.lang包中的各种基本数据类型类都具有相应的类方法实现转化操作。publicstaticbyteparseByte(Strings)publicstaticshortparseShort(Strings)publicstaticlongparseLong(Strings)publicstaticintparseInt(Strings)publicstaticfloatparseFloat(Strings)publicstaticdoubleparseDouble(Strings),Strings=“123”;Inti=Integer.parseInt(s);,对象的字符串表示,Object类是所有类的父类,它有一个public方法toString(),一个对象通过调用该方法可以获得该对象的字符串表示。,importjava.awt.*;importjava.util.*;publicclassC1publicstaticvoidmain(Stringargs)Dated=newDate();Buttonb=newButton(确定);System.out.println(d.toString();System.out.println(b.toString();,字符串与字符、字节数组,1、字符串与字符数组用字符数组创建字符串对象String(char)String(char,intoffset,intlength)将字符串的字符复制到字符数组publicvoidgetChars(intstart,intend,charc,intoffset)将当前字符串中从start至end-1位置上的字符复制到数组c中,并从数组c的offset处开始存放。publicchartoCharArray()初始化一个字符数组,该数组的长度与字符串长度相等,并将字符串对象的全部字符复制到该数组中。,2、字符串与字节数组用字节数组创建字符串对象String(byte)String(byte,intoffset,intlength)将字符串转换为字节数组PublicbytegetBytes()将当前字符串转化为一个字节数组。,例:publicclassExample5_10publicstaticvoidmain(Stringargs)byted=你我他.getBytes();System.out.println(数组d的长度是:+d.length);Strings=newString(d,0,2);System.out.println(s);,例:publicclassExample5_8publicstaticvoidmain(Stringargs)Strings=“华北电力大学计算机专业;charc=s.toCharArray(),d;d=newchar6;s.getChars(8,14,d,0);System.out.println(c);System.out.println(d);,任务,判断一个字符串是否为回文,即将一个字符串进行反转,得到的字符串与源串相同:例如原始字符串为“aba”,逆转后的字符串也为“aba”。,不变性,String类,创建后,直接修改,不变性的概念,解决方法,StringBuffer类,String的对等类,表示可增加和可编写字符的可变序列,将字符插入到字符串中间或附加到字符串末尾,StringBuffer类,StringBuffer用于表示可以修改的字符串使用连接运算符(+)的字符串会自动创建字符串缓冲对象,StringBuffer类的方法,StringBuffer类的方法,String与StringBuffer的转换,产生一个內容与String对象str相同的StringBufffer对象:StringBuffersb=newStringBuffer(str);产生一个內容与StringBuffer对象sb相同的String对象:Stringsb=sb.toSting();,classdemoOfStringBufferpublicstaticvoidmain(Stringbuf)StringBuffersb=newStringBuffer(abc);System.out.println(buffer=+sb);System.out.println(“length=”+sb.length();System.out.println(capacity=+sb.capacity();,运行结果:buffer=abclength=3capacity=19,从运行结果我们可以看到为附加处理保留了空间。注意:capacity()与length()的区别。,举例,publicclassStringBufpublicstaticvoidmain(Stringargs)StringBufferbuf=newStringBuffer(Java);buf.append(“GuideVer1/”);buf.append(3);intindex=5;buf.insert(index,Student);index=23;buf.setCharAt(index,.);intstart=24;intend=25;buf.replace(start,end,“6);Strings=buf.toString();/转换为字符串System.out.println(s);,JavaStudentGuideVer1.6,1.C和C+的字符串只是简单的以0结尾的字符数组,而Java中,字符串是一个封装的对象,这种处理对于编程者提供了许多有利之处。2.C和C+中可以通过指针直接对字符串所在的内存地址进行操作,并且不对越界情况进行检查,Java中只能通过类String或StringBuffer所提供的方法对字符串进行操作,并且要对越界情况进行检查并报告,这样大大增加了安全性。,Java与C和C+处理字符串的差别,编程练习,输入的一个字符串中包含了一个人的姓名、性别和年龄。中间用空格隔开。要求从该字符串中提取出姓名、性别和年龄并赋给相应的变量。表示年龄的变量是整型的。,搜索字符串S中是否包含s1,如果包含,则替换为s2。注意s1和s2的长度不一定相等。,3.3数组,数组是一种最简单的复合数据类型,是一组同类型有序数据的集合。数组分为一维数组和多维数组。数组的元素既可以是简单类型,也可以是引用类型。,Java中创建数组的步骤,声明数组创建数组空间,声明一维数组的两种形式数组元素类型数组名;数组元素类型数组名;,一维数组,创建数组空间数组名new数组元素类型元素个数;,可以为基本类型或复合类型,不能指出数组中元素的个数,intintArray;,floatf1,f2;,intArray=newint3,f1=newfloat10;f2=newfloat20;,简单类型数组分配内存示意图,0 xb1ca,intintArray;定义一个int类型的数组变量,给变量IntArray分配1个存储空间,初始化为null。,intArray=newint3;申请3个int类型的存储空间,并将首地址赋给变量IntArray。,0 xb1ca,intintArray;intArray=newint5,floatf1,f2;f1=newfloat10;f2=newfloat20;,一维数组,声明数组和创建数组空间可组合在一起,用一条语句完成。,创建可变长数组,intsize;size=System.in.read();intnumber=newintsize;,floatf=newfloat10;for(inti=0;if.length;i+)fi=i+10;f=newfloat20;,根据输入的数据来定义数组长度,在程序中随时修改数组长度,重新定义后数组元素初始化为0,数组元素的引用,数组元素的引用格式数组元素下标由0开始。最大的下标比数组长度小1。,例:inta=newint5数组a包含了5个数组元素,分别是:a0,a1,a2,a3,a4,a,整型:0实型:0.0f或0.0d字符:0引用类型:null,数组创建后,系统自动为数组元素赋初值。所以数组的创建也称为动态初始化。,数组元素的默认初值,一维数组静态初始化,与声明类型一致的初始值,intintArray=1,2,3,4,5;doubledecArray=1.1,2.2,3.3;StringstrArray=Java,BASIC,FORTRAN;,类型数组名=元素1,元素2,边界检查,Java对数组元素进行越界检查。对于每个数组都有一个属性length指明自身的长度,如:f1.length指明数组f1的长度。,例:为数组元素赋值并逆序输出,publicclassArrayTestpublicstaticvoidmain(Stringargs)inti;inta=newint5;for(i=0;i=0;i-)System.out.println(a+i+=+ai);,运行结果为:a4=4a3=3a2=2a1=1a0=0,for-each格式的循环语句,for(Typevalue:array)expressionvalue;,for(inti=0;ia.length;i+)System.out.println(ai);,for(intx:a)System.out.println(x);,作用:顺次遍历数组中的元素,并将元素的值赋给临时变量。缺点:只能顺次遍历每个元素;只能读取,不能写入。,数组名,staticdoubleaverage(doublescore)inti;doublesum=0,ave;for(i=0;iscore.length;i+)sum+=scorei;ave=sum/score.length;return(ave);,实现sort方法,总体实现,期末考试结束,编写方法average求出某班级前10名同学Java课程的平均分,并编写方法sort将前10同学的成绩按由高到底进行排序。,实现average方法,staticvoidsort(doublescore)inti,j;doubletemp;for(i=0;iscorej)temp=scorei;scorei=scorej;scorej=temp;,publicclassScorepublicstaticvoidmain(Stringargs)doublea=78,89,57,87,98,65,43,79,69,86;doubleaver=average(a);System.out.println(aver);sort(a);for(intk=0;k10;k+)System.out.print(ak+);,1.创建数组typearrayName=newtypearraySize;2.创建每一个数组元素arrayName0=newtype(paramList);arrayName1=newtype(paramList);arrayNamearraySize-1=newtype(paramList);,对象数组的创建,StringstringArray;/定义一个String类型的数组变量stringArray=newString3;/给数组变量StringArray分配3个连续的存储空间,初始化每个引用值为nullstringArray0=newString(“how”);stringArray1=newString(“are”);stringArray2=newString(“you”);,初始化数组元素,对象数组内存分配示意图,stringArray,oxa2b6,StringstringArray;stringArray=newString3;stringArray0=newString(“how”);stringArray1=newString(“are”);stringArray2=newString(“you”);,null,将学生姓名存储在字符数组中,当输入一个姓名时,进行查找,并给出结果。,publicclassSearchpublicstaticvoidmain(Stringargs)inti;StringstudentName=newString30;Scannersc=newScanner(System.in);for(i=0;i=5)System.out.println(没找到);,多维数组,在Java语言中,多维数组被看作数组的数组。使用二维数组可方便地处理表格形式的数据。,二维数组的声明,声明二维数组的一般形式为:类型数组名;或类型数组名;或类型数组名;,如:inta;inta;inta;,分配存储空间,为二维数组分配空间有两种方法:静态初始化使用new运算符(动态初始化),在Java语言中,由于把二维数组看作是数组的数组,数组空间不一定连续分配。所以不要求二维数组每一维的大小相同。,二维数组的静态初始化,静态初始化是在声明数组的同时就为数组元素指定初值。例如:intintArray=1,2,3,4,5,6,7;,不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。,1.直接为每一维分配空间。typearrayName=newtypelength1length2,inta=newint34;,二维数组的动态初始化,2.分别为每一维分配空间(必须从最高维开始)。,111121,inta=newint3a0=newint1a1=newint2a2=newint3,000000000000,第2维的维数相同,是规则的二维数组,第2维的维数不同,是不规则的二维数组,简单二维数组内存分配示意图,floatx;,x,null,x=newfloat3;,x,0 xab12,nullnullnull,x0=newint2;x1=newint3;x2=newint4;,x,0 xab12,x0,x1,x2,x0,x1,x2,例如:Strings=newString2;s0=newString2;s1=newString3;s00=newString(“Good”);s01=newString(“Luck”);s10=newString(“to”);s11=newString(“you”);s12=newString(“!”);,二维数组的动态初始化,对二维数组中每个元素,引用方式为:arrayNameindex1index2其中index1和index2是数组下标,为整型常数和整型表达式,都是从0开始的。,二维数组元素的引用,publicclassYanghuipublicstaticvoidmain(Stringargs)finalintMAX=10;intmat=newintMAX;inti=0,j,n=MAX;for(i=0;in;i+)mati=newinti+1;mati0=1;matii=1;for(j=1;ji;j+)matij=mati-1j-1+mati-1j;for(i=0;in;i+)for(j=0;jn-i;j+)System.out.print();for(j=0;j=i;j+)System.out.print(+matij);System.out.println();,例:输出杨辉三角,写出运行结果,classShuzupublicstaticvoidmain(Stringarg)inta=newint3;inti,j;a0=newint2;a1=newint3;a2=newint4;for(i=0;ia.length;i+)for(j=0;jai.length;j+)aij=i+j;System.out.print(aij+”);System.out.println();,011232345,二维矩阵转置,publicclassMatrixtpublicstaticvoidmain(Stringargs)inta=1,2,3,4,2,3,4,5,3,4,5,6;intb=newint43;inti,j;for(i=0;i3;i+)for(j=0;j4;j+)bji=aij;for(i=0;i4;i+)for(j=0;j3;j+)System.out.print(s+);System.out.println();,程序运行结果:123234345456,数组操作的常用方法,publicstaticvoidarraycopy(Objectsrc,intsrc_position,Objectdst,intdst_position,intlength),类System的静态方法arraycopy(),可用来进行数组复制。其格式和功能如下:,自学数组操作的常用方法,arraycopy()方法,【案例】用方法arraycopy()复制数组。,classArrayCopypublicstaticvoidmain(Stringargs)intarray1=1,2,3,4,5,6,7,8,9,10;intarray2=0,0,0,0,0,0,0,0,0,0;System.arraycopy(array1,0,array2,2,5);System.out.print(array2:);for(ints:array2)System.out.print(s+);System.out.println();,程序运行结果如下:array2:0012345000,类Arrays中的方法,java.util.Arrays类中提供了对数组排序sort()、二分查找binarySearch()等静态方法。,sort()方法,【案例】使用sort()方法对一整型数组递增排序,importjava.util.*;publicclassArraySortpublicstaticvoidmain(Stringargs)inta=8,6,7,3,5,4,i;Arrays.sort(a);for(ints:a)System.out.print(+s);System.out.println();,程序运行结果为:345678,使用数组来存储不同类型数据,publicclassbbbpublicstaticvoidmain(Stringargs)Objecta=newObject5;a0=5;a1=a;a2=3.456;a3=abcde;a4=(Integer)a0+3;for(Objectx:a)System.out.println(x);,向量的介绍,向量(Vector)是java.util类包提供的一个工具类。它是允许不同类型元素共存的变长数组。每个Vector类的对象可以表达一个完整的数据序列。Vector可以追加对象元素数量,可以方便的修改和维护序列中的对象。,向量的适用情况,需要将不同类的对象组合成一个数据序列。序列中的元素个数不确定。序列中的元素都是对象或可以表示为对象。需要做频繁的查询、插入或删除等操作。在不同的类之间传递大量的数据。,Vector类有三个构造方法:Vector():构造一个长度为10的空向量。Vector(intcapacity)以指定的存储容量构造一个空向量。Vector(intcapacity,intcapacityIncrement)以指定的存储容量和容量增量构造一个空向量。,创建向量,VectorMyVector=newVector(100,50);创建的MyVector向量序列初始有100个元素的空间,以后一旦使用殆尽则以50为单位递增,使序列中元素的个数变化成150,200,。在创建Vector序列时,不需要指明序列中元素的类型,可以在使用时确定。,创建向量,addElement(Objectobj)将新元素添加到序列尾部。insertElementAt(Objectobj,intindex)将新元素插入到指定位置。,向向量序列中添加元素,插入位置,VectorMyVector=newVector();for(inti=1;i=10;i+)MyVector.addElement(newInteger(i);MyVector.insertElementAt(middle,5);,添加元素实例,importjava.util.*;classAapublicstaticvoidmain(Stringarg)VectorMyVector=newVector();for(inti=1;i=10;i+)MyVector.addElement(newInteger(i);MyVector.insertElementAt(middle,5);for(inti=0;i=10;i+)System.out.println(MyVector.elementAt(i);,添加元素实例,运行结果:12345middle678910,setElementAt(Objectobj,intindex)将index位置处的对象元素设置为obj,如果这个位置原来有元素,则被覆盖。removeElement(Objectobj)删除与指定的obj对象相同的第一个元素,同时将后面的元素前提,补上空位。返回值是布尔值。removeElementAt(intindex)删除index指定位置处的元素,将后面的元素前提。removeAllElements():清除序列中的所有元素。,元素的修改或删除,VectorMyVector=newVector(100);for(inti=0;i10;i+)MyVector.addElement(“welcome”);MyVector.addElement(“to”);MyVector.addElement(“beijing”);while(MyVector.removeElement(“to”);,向量实例添加删除元素,1.ObjectelementAt(intindex)返回指定位置处的元素。一个要注意的问题:由于返回的是Object类型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。例如:Stringstr=(String)MyVector.elementAt(0);2.booleancontains(Objectobj)检查向量序列中是否包含指定的对象元素obj。,查找向量序列中的元素,3.intindexOf(Objectobj,intstart_index)从指定的start_index位置开始向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回1。4.intlastIndexOf(Objectobj,intstart_index)从指定的start_index位置开始向前搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回1。,inti=0;While(i=MyVector.indexOf(“welcome”,i)!=-1)System.out.printl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流行业售后服务跟踪方案
- 一年级下册数学教案-第6单元 4、两位数减一位数、整十数∣人教新课标
- 农产品跨境电商营销方案
- 2024年会计系统维护员协议
- 定向钻专项施工质量控制方案
- (2024版)金融科技解决方案提供合同
- 洁净室施工进度管理合同
- 2024年变压器生产设备升级合同
- 航空航天项目材料供货方案
- 中秋节儿童故事会活动方案
- 学习投入量表
- 高中美术-抽象艺术教学课件设计
- 啄木鸟纠错活动方案(八篇)
- 出口退税知识培训
- 王崧舟慈母情深课件
- 某水利工程引水隧洞重大设计变更索赔报告
- 南京工业职业技术大学辅导员考试题库
- 山东省青岛市青岛第二中学2024年高三物理第一学期期中联考模拟试题含解析
- 2024年消防设施操作员之消防设备高级技能每日一练试卷B卷含答案
- 大学办公室管理制度公司管理制度
- 牛津译林版八年级英语上册Unit 7 Seasons Grammar 示范公开课教学课件
评论
0/150
提交评论