JAVA数组向量字符串.ppt

上传人:牧羊曲112 文档编号:6509852 上传时间:2023-11-07 格式:PPT 页数:96 大小:854.50KB
返回 下载 相关 举报
JAVA数组向量字符串.ppt_第1页
第1页 / 共96页
JAVA数组向量字符串.ppt_第2页
第2页 / 共96页
JAVA数组向量字符串.ppt_第3页
第3页 / 共96页
JAVA数组向量字符串.ppt_第4页
第4页 / 共96页
JAVA数组向量字符串.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《JAVA数组向量字符串.ppt》由会员分享,可在线阅读,更多相关《JAVA数组向量字符串.ppt(96页珍藏版)》请在三一办公上搜索。

1、,第3章 字符串、数组和向量,任务,从一个带有路径的文件名中分离出文件名和路径,C:Program FilesJdkreadme.html,字符串,在Java中,字符串被当作对象来处理。字符串分类字符串常量创建之后不能再修改。用String类来创建字符串常量。字符串变量创建之后可以做修改。一般用StringBuffer类来创建。,String类和StringBuffer类都在java.lang包中。,类String字符串定义,可以用字符串常量直接初始化一个String对象 String s=Hello World;通过构造方法,char chars=a,b,c;String s=new Str

2、ing(chars);,String s=new String(“hello”);或:String s=“hello”;,String s=new String();,byte bytestr=97,98,99;String s=new String(bytestr);,字符串变量和普通变量的区别,String构造方法的使用举例,public static void main(String args)String s,s1,s2,s3,s4,s5,s6,s7;byte byteArray=(byte)J,(byte)a,(byte)v,(byte)a;char charArray=程,序,设,

3、计,课,程;StringBuffer sb=new StringBuffer(欢迎);s=new String(Hello!);s1=new String();s2=new String(s);s3=new String(sb);s4=new String(charArray);s5=new String(charArray,2,4);s6=new String(byteArray);s7=new String(byteArray,0,1);,Hello!Hello!欢迎程序设计课程设计课程JavaJ,字符串,长度,由 length()方法确定,语法,public int length();,

4、返回字符串中的字符数,String的常用方法字符串长度,String name=John Smith;(name.length();,String的常用方法字符串比较,字符串变量 1,字符串变量 2,字符串变量 1,字符串变量 2,由 equals()方法确定,检查字符串变量指向的字符串是否相等,同一个对象,用=运算符检查,检查字符串变量是否指向同一个字符串对象,public class StringCompare public static void main(String args)String s1=abc;String s2=abcd;System.out.println(s1=s2)

5、;System.out.println(s1.equals(s2);String t1=new String(abc);String t2=new String(abc);System.out.println(t1=t2);System.out.println(t1.equals(t2);String t3=t1;System.out.println(t1=t3);System.out.println(t1.equals(t3);,字符串比较举例,程序运行结果如下:falsefalsefalsetruetruetrue,字符串比较方法,字符串连接,在Java中,运算符“”可以用来实现字符串的连

6、接,如:String s=“He is”+age+”years old.”假设整数型变量age的值为15,那么,s的值为“He is 15 years old”。,搜索字符和字符串,搜索字符和字符串,搜索字符串举例_判断邮箱正确性,public class SearchString public static void main(String args)String name=JohnS;System.out.println(“Email ID 是:+name);(“的索引是:+name.indexOf();(“.的索引是:+name.indexOf(.);if(name.indexOf(.)

7、name.indexOf()(“该电子邮件地址有效);else(“该电子邮件地址无效);,邮箱格式:XXXXXX.com判断:应该在.之前,字符串提取、连接、替换等方法,字符串应用举例,public class StringMethods public static void main(String args)String s1=Hello world;String s2=Hello;System.out.println(s1.substring(3,8);System.out.println(s2.concat(World);System.out.println(s2.replace(l,w

8、);System.out.println(s1.trim();,lo woHelloWorldHewwoHello world,更改字符大小写方法,Hello,使用 toUpperCase()方法,HELLO,HELLO,使用 toLowerCase()方法,hello,语法,public String toUpperCase();,语法,Public String toLowerCase();,更改字符大小写方法举例,public class StringTest public static void main(String args)String name=new String(Georg

9、e);(“姓名是+name);int length=name.length();(“姓名的长度为”+length+“个字符);(“姓名用大写形式表示为:);String nameUppercase=name.toUpperCase();System.out.println(nameUppercase);,任务实现:分离文件名和路径,public class GetFilenameprivate String fullPath;private char pathSepatator=;public GetFilename(String fname)fullPath=fname;public Str

10、ing getName()int pos=fullPath.lastIndexOf(pathSepatator);if(pos=-1)return fullPath;else return fullPath.substring(pos+1);public String getPath()int pos=fullPath.lastIndexOf(pathSepatator);if(pos=-1)return fullPath;else return fullPath.substring(0,pos);public static void main(String args)GetFilename

11、fn=new GetFilename(F:avamyexamplea.java);System.out.println(fn.getName();System.out.println(fn.getPath();,C:Program FilesJdkreadme.html,字符串与基本数据的相互转化,各种基本数据类型与String类型之间可以通过方法相互转换。String类中的valueOf()系列方法用于从基本数据类型转换成字符串。public static String valueOf(Boolean b)public static String valueOf(char c)public

12、static String valueOf(int i)public static String valueOf(long l)public static String valueOf(float f)public static String valueOf(double d),将字符串转化为基本数据类型Java.lang包中的各种基本数据类型类都具有相应的类方法实现转化操作。public static byte parseByte(String s)public static short parseShort(String s)public static long parseLong(Str

13、ing s)public static int parseInt(String s)public static float parseFloat(String s)public static double parseDouble(String s),String s=“123”;Int i=Integer.parseInt(s);,对象的字符串表示,Object类是所有类的父类,它有一个public方法toString(),一个对象通过调用该方法可以获得该对象的字符串表示。,import java.awt.*;import java.util.*;public class C1public s

14、tatic void main(String args)Date d=new Date();Button b=new Button(确定);System.out.println(d.toString();System.out.println(b.toString();,字符串与字符、字节数组,1、字符串与字符数组 用字符数组创建字符串对象String(char)String(char,int offset,int length)将字符串的字符复制到字符数组public void getChars(int start,int end,char c,int offset)将当前字符串中从start

15、至end-1位置上的字符复制到数组c中,并从数组c的offset处开始存放。public char toCharArray()初始化一个字符数组,该数组的长度与字符串长度相等,并将字符串对象的全部字符复制到该数组中。,2、字符串与字节数组用字节数组创建字符串对象String(byte)String(byte,int offset,int length)将字符串转换为字节数组Public byte getBytes()将当前字符串转化为一个字节数组。,例:public class Example5_10 public static void main(String args)byte d=你我他

16、.getBytes();(数组d的长度是:+d.length);String s=new String(d,0,2);System.out.println(s);,例:public class Example5_8public static void main(String args)String s=“华北电力大学计算机专业;char c=s.toCharArray(),d;d=new char6;s.getChars(8,14,d,0);System.out.println(c);System.out.println(d);,任务,判断一个字符串是否为回文,即将一个字符串进行反转,得到的字

17、符串与源串相同:例如原始字符串为“aba”,逆转后的字符串也为“aba”。,不变性,String类,创建后,直接修改,不变性的概念,解决方法,StringBuffer 类,String 的对等类,表示可增加和可编写字符的可变序列,将字符插入到字符串中间或附加到字符串末尾,StringBuffer 类,StringBuffer 用于表示可以修改的字符串 使用连接运算符(+)的字符串会自动创建字符串缓冲对象,StringBuffer 类的方法,StringBuffer 类的方法,String与StringBuffer的转换,产生一个內容与String对象str相同的StringBufffer对象:

18、StringBuffer sb=new StringBuffer(str);产生一个內容与StringBuffer对象sb相同的String对象:String sb=sb.toSting();,class demoOfStringBuffer public static void main(String buf)StringBuffer sb=new StringBuffer(abc);(buffer=+sb);(“length=”+sb.length();(capacity=+sb.capacity();,运行结果:buffer=abclength=3capacity=19,从运行结果我们可

19、以看到为附加处理保留了空间。注意:capacity()与length()的区别。,举例,public class StringBuf public static void main(String args)StringBuffer buf=new StringBuffer(Java);buf.append(“Guide Ver1/”);buf.append(3);int index=5;buf.insert(index,Student);index=23;buf.setCharAt(index,.);int start=24;int end=25;buf.replace(start,end,“

20、6);String s=buf.toString();/转换为字符串 System.out.println(s);,Java Student Guide Ver1.6,1.C和C+的字符串只是简单的以0结尾的字符数组,而Java中,字符串是一个封装的对象,这种处理对于编程者提供了许多有利之处。2.C和C+中可以通过指针直接对字符串所在的内存地址进行操作,并且不对越界情况进行检查,Java中只能通过类String或StringBuffer所提供的方法对字符串进行操作,并且要对越界情况进行检查并报告,这样大大增加了安全性。,Java与C和C+处理字符串的差别,编程练习,输入的一个字符串中包含了一个

21、人的姓名、性别和年龄。中间用空格隔开。要求从该字符串中提取出姓名、性别和年龄并赋给相应的变量。表示年龄的变量是整型的。,搜索字符串S中是否包含s1,如果包含,则替换为s2。注意s1和s2的长度不一定相等。,3.3 数组,数组是一种最简单的复合数据类型,是一组同类型有序数据的集合。数组分为一维数组和多维数组。数组的元素既可以是简单类型,也可以是引用类型。,Java中创建数组的步骤,声明数组创建数组空间,声明一维数组的两种形式 数组元素类型数组名;数组元素类型 数组名;,一 维 数 组,创建数组空间 数组名new 数组元素类型元素个数;,可以为基本类型或复合类型,不能指出数组中元素的个数,int

22、intArray;,float f1,f2;,intArray=new int3,f1=new float10;f2=new float20;,简单类型数组分配内存示意图,0 xb1ca,int intArray;定义一个int类型的数组变量,给变量IntArray分配1个存储空间,初始化为null。,intArray=new int3;申请3个int类型的存储空间,并将首地址赋给变量IntArray。,0 xb1ca,int intArray;intArray=new int5,float f1,f2;f1=new float10;f2=new float20;,一 维 数 组,声明数组和创

23、建数组空间可组合在一起,用一条语句完成。,创建可变长数组,int size;size=();int number=new intsize;,float f=new float10;for(int i=0;if.length;i+)fi=i+10;f=new float20;,根据输入的数据来定义数组长度,在程序中随时修改数组长度,重新定义后数组元素初始化为0,数组元素的引用,数组元素的引用格式 数组元素下标由0开始。最大的下标比数组长度小1。,例:int a=new int5 数组a包含了5个数组元素,分别是:a0,a1,a2,a3,a4,a,整型:0实型:0.0f 或 0.0d字符:0引用类

24、型:null,数组创建后,系统自动为数组元素赋初值。所以数组的创建也称为动态初始化。,数组元素的默认初值,一维数组静态初始化,与声明类型一致的初始值,int intArray=1,2,3,4,5;double decArray=1.1,2.2,3.3;String strArray=Java,BASIC,FORTRAN;,类型 数组名=元素1,元素2,边 界 检 查,Java对数组元素进行越界检查。对于每个数组都有一个属性length指明 自身的长度,如:f1.length指明数组f1的长度。,例:为数组元素赋值并逆序输出,public class ArrayTest public stati

25、c void main(String args)int i;int a=new int5;for(i=0;i=0;i-)System.out.println(a+i+=+ai);,运行结果为:a4=4a3=3 a2=2 a1=1a0=0,for-each格式的循环语句,for(Type value:array)expression value;,for(int i=0;ia.length;i+)System.out.println(ai);,for(int x:a)System.out.println(x);,作用:顺次遍历数组中的元素,并将元素的值赋给临时变量。缺点:只能顺次遍历每个元素;只

26、能读取,不能写入。,数组名,static double average(double score)int i;double sum=0,ave;for(i=0;iscore.length;i+)sum+=scorei;ave=sum/score.length;return(ave);,实现sort方法,总体实现,期末考试结束,编写方法average求出某班级前10名同学Java课程的平均分,并编写方法sort将前10同学的成绩按由高到底进行排序。,实现average方法,static void sort(double score)int i,j;double temp;for(i=0;isco

27、rej)temp=scorei;scorei=scorej;scorej=temp;,public class Score public static void main(String args)double a=78,89,57,87,98,65,43,79,69,86;double aver=average(a);System.out.println(aver);sort(a);for(int k=0;k10;k+)System.out.print(ak+);,1.创建数组 type arrayName=new typearraySize;2.创建每一个数组元素 arrayName0=ne

28、w type(paramList);arrayName1=new type(paramList);arrayNamearraySize-1=new type(paramList);,对象数组的创建,String stringArray;/定义一个String类型的数组变量stringArray=new String3;/给数组变量StringArray分配 3个连续的存储空间,初始化每个引用值为nullstringArray0=new String(“how”);stringArray1=new String(“are”);stringArray2=new String(“you”);,初始化

29、数组元素,对象数组内存分配示意图,stringArray,oxa2b6,String stringArray;stringArray=new String3;stringArray0=new String(“how”);stringArray1=new String(“are”);stringArray2=new String(“you”);,null,将学生姓名存储在字符数组中,当输入一个姓名时,进行查找,并给出结果。,public class Search public static void main(String args)int i;String studentName=new St

30、ring30;Scanner sc=new Scanner(System.in);for(i=0;i=5)(没找到);,多维数组,在Java语言中,多维数组被看作数组的数组。使用二维数组可方便地处理表格形式的数据。,二维数组的声明,声明二维数组的一般形式为:类型 数组名;或 类型 数组名;或 类型 数组名;,如:int a;int a;int a;,分配存储空间,为二维数组分配空间有两种方法:静态初始化 使用new运算符(动态初始化),在Java语言中,由于把二维数组看作是数组的数组,数组空间不一定连续分配。所以不要求二维数组每一维的大小相同。,二维数组的静态初始化,静态初始化是在声明数组的同

31、时就为数组元素指定初值。例如:int intArray=1,2,3,4,5,6,7;,不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。,1.直接为每一维分配空间。type arrayName=new typelength1length2,int a=new int34;,二维数组的动态初始化,2.分别为每一维分配空间(必须从最高维开始)。,111121,int a=new int3a0=new int1a1=new int2a2=new int3,000000000000,第2维的维数相同,是规则的二维数组,第2维的维数不同,是不规则的二维数组,简单二维

32、数组内存分配示意图,float x;,x,null,x=new float3;,x,0 xab12,nullnullnull,x0=new int2;x1=new int3;x2=new int4;,x,0 xab12,x0,x1,x2,x0,x1,x2,例如: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(“!”);,二维数组的动态初

33、始化,对二维数组中每个元素,引用方式为:arrayNameindex1index2 其中index1和index2是数组下标,为整型常数和整型表达式,都是从0开始的。,二维数组元素的引用,public class Yanghuipublic static void main(String args)final int MAX=10;int mat=new int MAX;int i=0,j,n=MAX;for(i=0;in;i+)mati=new int i+1;mati0=1;matii=1;for(j=1;ji;j+)matij=mati-1j-1+mati-1j;for(i=0;in;i

34、+)for(j=0;jn-i;j+)();for(j=0;j=i;j+)(+matij);();,例:输出杨辉三角,写出运行结果,class Shuzu public static void main(String arg)int a=new int3;int i,j;a0=new int2;a1=new int3;a2=new int4;for(i=0;ia.length;i+)for(j=0;jai.length;j+)aij=i+j;System.out.print(aij+”);();,0 1 1 2 3 2 3 4 5,二维矩阵转置,public class Matrixt publ

35、ic static void main(String args)int a=1,2,3,4,2,3,4,5,3,4,5,6;int b=new int 43;int i,j;for(i=0;i 3;i+)for(j=0;j 4;j+)bji=aij;for(i=0;i 4;i+)for(j=0;j 3;j+)System.out.print(s+);();,程序运行结果:1 2 3 2 3 4 3 4 5 4 5 6,数组操作的常用方法,public static void arraycopy(Object src,int src_position,Object dst,int dst_pos

36、ition,int length),类System的静态方法arraycopy(),可用来进行数组复制。其格式和功能如下:,自学数组操作的常用方法,arraycopy()方法,【案例】用方法arraycopy()复制数组。,class ArrayCopy public static void main(String args)int array1=1,2,3,4,5,6,7,8,9,10;int array2=0,0,0,0,0,0,0,0,0,0;System.arraycopy(array1,0,array2,2,5);System.out.print(array2:);for(int s

37、:array2)System.out.print(s+);();,程序运行结果如下:array2:0 0 1 2 3 4 5 0 0 0,类 Arrays中的方法,类中提供了对数组排序sort()、二分查找binarySearch()等静态方法。,sort()方法,【案例】使用sort()方法对一整型数组递增排序,import java.util.*;public class ArraySort public static void main(String args)int a=8,6,7,3,5,4,i;Arrays.sort(a);for(int s:a)(+s);();,程序运行结果为:

38、3 4 5 6 7 8,使用数组来存储不同类型数据,public class bbb public static void main(String args)Object a=new Object5;a0=5;a1=a;a2=3.456;a3=abcde;a4=(Integer)a0+3;for(Object x:a)System.out.println(x);,向量的介绍,向量(Vector)是java.util类包提供的一个工具类。它是允许不同类型元素共存的变长数组。每个Vector类的对象可以表达一个完整的数据序列。Vector可以追加对象元素数量,可以方便的修改和维护序列中的对象。,向

39、量的适用情况,需要将不同类的对象组合成一个数据序列。序列中的元素个数不确定。序列中的元素都是对象或可以表示为对象。需要做频繁的查询、插入或删除等操作。在不同的类之间传递大量的数据。,Vector类有三个构造方法:Vector():构造一个长度为10的空向量。Vector(int capacity)以指定的存储容量构造一个空向量。Vector(int capacity,int capacityIncrement)以指定的存储容量和容量增量构造一个空向量。,创建向量,Vector MyVector=new Vector(100,50);创建的MyVector向量序列初始有100个元素的空间,以后一

40、旦使用殆尽则以50为单位递增,使序列中元素的个数变化成150,200,。在创建Vector序列时,不需要指明序列中元素的类型,可以在使用时确定。,创建向量,addElement(Object obj)将新元素添加到序列尾部。insertElementAt(Object obj,int index)将新元素插入到指定位置。,向向量序列中添加元素,插入位置,Vector MyVector=new Vector();for(int i=1;i=10;i+)MyVector.addElement(new Integer(i);MyVector.insertElementAt(middle,5);,添加

41、元素实例,import java.util.*;class Aapublic static void main(String arg)Vector MyVector=new Vector();for(int i=1;i=10;i+)MyVector.addElement(new Integer(i);MyVector.insertElementAt(middle,5);for(int i=0;i=10;i+)System.out.println(MyVector.elementAt(i);,添加元素实例,运行结果:12345middle678910,setElementAt(Object ob

42、j,int index)将index位置处的对象元素设置为obj,如果这个位置原来有元素,则被覆盖。removeElement(Object obj)删除与指定的obj对象相同的第一个元素,同时将后面的元素前提,补上空位。返回值是布尔值。removeElementAt(int index)删除index指定位置处的元素,将后面的元素前提。removeAllElements():清除序列中的所有元素。,元素的修改或删除,Vector MyVector=new Vector(100);for(int i=0;i10;i+)MyVector.addElement(“welcome”);MyVecto

43、r.addElement(“to”);MyVector.addElement(“beijing”);while(MyVector.removeElement(“to”);,向量实例添加删除元素,1.Object elementAt(int index)返回指定位置处的元素。一个要注意的问题:由于返回的是Object类型的对象,在使用之前通常需要进行强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。例如:String str=(String)MyVector.elementAt(0);2.boolean contains(Object obj)检查向量序列中是否包含指定的对

44、象元素obj。,查找向量序列中的元素,3.int indexOf(Object obj,int start_index)从指定的start_index位置开始向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回1。4.int lastIndexOf(Object obj,int start_index)从指定的start_index位置开始向前搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回1。,int i=0;While(i=MyVector.indexOf(“welcome”,i)!=-1)System.out

45、.println(i);i+;,查找向量序列中的元素,capacity():返回Vector的容量 clone():建立Vector的备份copyInto(Object):把Vector中的元素拷贝到一个数组中firstElement():返回第一个元素lastElement():返回最后一个元素isEmpty():判断是否为空setSize(int size):设置Vector的大小size():返回Vector中元素的数量trimToSize():将Vector的容量下调至最小值,Vector中的其他方法,使用Vector时,一个需要特别注意的问题就是要先创建后使用。如果不先使用new运算

46、符利用构造函数创建Vector类的对象,而直接使用Vector的方法,如:addElement()等方法,则可能造成堆栈溢出或使用null指针等异常,妨碍程序的正常运行。,使用向量应注意:,例题:用向量实现,创建3个学生对象(学号、姓名、年龄)和4个教师对象(教工号、姓名、系别),并且输出。,创建向量的对象,import java.util.*;class Stu String xh;String xm;int nl;public Stu(String xh1,String xm1,int nl1)xh=xh1;xm=xm1;nl=nl1;void disp()(学生:+xh+xm+nl);,

47、class Tech String zh;String xm;String xb;public Tech(String zh1,String xm1,String xb1)zh=zh1;xm=xm1;xb=xb1;void disp()(教师:+zh+xm+xb);,public class StuTer public static void main(String s)Vector st=new Vector();st.addElement(new Stu(101,李明,18);st.addElement(new Stu(102,王大力,20);st.addElement(new Stu(1

48、03,刘萍,19);st.addElement(new Tech(10100,林小利,计算机);st.addElement(new Tech(10101,熊平,计算机);st.addElement(new Tech(10102,戴红兵,电力);st.addElement(new Tech(10103,曲小军,电力);for(int i=0;ist.size();i+)if(st.elementAt(i)instanceof Stu)(Stu)(st.elementAt(i).disp();else(Tech)(st.elementAt(i).disp();,拓展性知识,1、自己查阅JDK的帮助

49、,学习Math类的使用2、通过阅读课外书和利用网络,学习javadoc工具的使用,课下实战,根据任意给定的日期,请编程计算出该天是星期几编程完成一个体彩随机抽号的游戏,要求从n个号码中随机抽取m个号码,并且不能重复。,字符串编程练习,输入的一个字符串中包含了一个人的姓名、性别和年龄。中间用空格隔开。要求从该字符串中提取出姓名、性别和年龄并赋给相应的变量。表示年龄的变量是整型的。,搜索字符串S中是否包含s1,如果包含,则替换为s2。注意S1和S2的长度不一定相等。如:串1:563ty23tyio 串2:ty 串3:abc 结果:563abc23abcio,1.用数组实现,创建3个学生对象(学号、

50、姓名、年龄)和4个教师对象(教工号、姓名、系别),并且输出。(数据从键盘输入)2.用向量实现上题。3.编程实现判断字符串1是否在字符串2中出现,如果出现,则用字符串3替换。4.用二维数组实现,5个学生7门课程的总分和平均分的统计工作。,数组和向量作业,编程实现判断字符串1是否在字符串2中出现,如果出现,则用字符串3替换。,public class StringReplace public static void main(String args)StringBuffer s1=new StringBuffer(563ty23tyio);String s2=ty,s3=abc;int l=0;w

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号