JAVA数组向量字符串(11级).ppt

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

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

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=n

2、ew String(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 ss=new StringBuffer(欢迎);s=new String(Hello!);s1=new String();s2=new String(s);s3=new String(charArray);s4=new String(charArray,2,4);s5=new String(byteArray);s6=new String(byteArray,0,1);,Hello!Hello!程序设计课程设计课程JavaJ,字符串,长度,由 length()方法确定,语法,public int length();,返回字符串中的字符数,Str

4、ing的常用方法字符串长度,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);System.out.pr

5、intln(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中,运算符“”可以用来实现字符串的连接,如:String s=“

6、He is”+age+”years old.”假设整数型变量age的值为15,那么,s的值为“He is 15 years old”。,搜索字符和字符串,搜索字符和字符串,搜索字符串举例_判断邮箱正确性,public class SearchString public static void main(String args)String email=JohnS;int n1=email.indexOf();int n2=email.indexOf(.);if(n1n2)(“该电子邮件地址有效);else(“该电子邮件地址无效);,邮箱格式:XXXXXX.com判断:应该在.之前,字符串提取、

7、连接、替换等方法,字符串应用举例,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);System.out.println(s1.trim();,lo woHelloWorldHewwoHello world,更改字符大小写方法,He

8、llo,使用 toUpperCase()方法,HELLO,HELLO,使用 toLowerCase()方法,hello,语法,public String toUpperCase();,语法,Public String toLowerCase();,更改字符大小写方法举例,public class StringTest public static void main(String args)String name=new String(George);(“姓名是+name);int length=name.length();(“姓名的长度为”+length+“个字符);(“姓名用大写形式表示为:

9、);String nameUppercase=name.toUpperCase();System.out.println(nameUppercase);,任务实现:分离文件名和路径,public class HelloWorldApp public static void main(String args)String fullPath=F:javamyexamplea.java;int pos=fullPath.lastIndexOf();System.out.println(fullPath.substring(0,pos);System.out.println(fullPath.subs

10、tring(pos+1);,C:Program FilesJdkreadme.html,字符串与模式匹配,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分别指明当前字符串和参数字符串中所要比较的子串

11、的起始索引位置,len指明比较的长度,而ignoreCase指明比较时是否区分大小写。对于第一种方法,比较是区分大小写的。,class zcf public static void main(String arg)String str1=12abc56rg;String str2=sfabc16;int i,j,k;for(i=1;istr1.length();i+)/子串的长度从1开始 for(j=0;jstr1.length();j+)/str1的子串/判断str1中的子串是否在str2中出现 for(k=0;k=str2.length();k+)if(str1.regionMatches

12、(j,str2,k,i)System.out.println(str1.substring(j,j+i);/截取子串,找两个字符串出现的相同子串,Str1:12abc56rgStr2:sfabc16,1abc6abbcabc,字符串与基本数据的相互转化,各种基本数据类型与String类型之间可以通过方法相互转换。String类中的valueOf()系列方法用于从基本数据类型转换成字符串。public static String valueOf(Boolean b)public static String valueOf(char c)public static String valueOf(i

13、nt 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(String s)public static int

14、 parseInt(String s)public static float parseFloat(String s)public static double parseDouble(String s),String s=“123”;int i=Integer.parseInt(s);,字符串与基本数据的相互转化,字符串与字符数组的转化,字符数组 转换为 字符串对象String(char)String(char,int offset,int length)字符串 转换为 字符数组public void getChars(int start,int end,char c,int offset)将

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

16、String args)byte d=你我他.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);,java.util包

17、中StringTokenizer类所定义的对象,可以用来对字符串进行分析。比如一个句子、一个段落,一篇文章字、词个数统计等。StringTokenizer类的两个常用构造方法:StringTokenizer(String s)为字符串s构造一个分析器,使用默认的分隔符集合,即空格符、换行符、回车符、Tab符、进纸符。StringTokenizer(String s,String delim)为字符串s构造一个分析器,参数delim中的字符作为分隔符。,StringTokenizer类字符串词法分析器,StringTokenizer类的成员方法nextToken():逐个获取字符串的每一个语言符

18、号单位hasMoreTokens():判断字符串中是否还有语言符号countTokens():统计字符串中共有多少个语言符号,import java.util.*;public class Example5_7 public static void main(String args)String s=I am James,she is my girlfriend;StringTokenizer fenxi=new StringTokenizer(s,);int number=fenxi.countTokens();while(fenxi.hasMoreTokens()String str=fe

19、nxi.nextToken();System.out.println(str);(还剩+fenxi.countTokens()+个单词);System.out.println(s共有单词:+number+个);,程序运行结果:,不变性,String类,创建后,直接修改,不变性的概念,解决方法,StringBuffer 类,String 的对等类,表示可增加和可编写字符的可变序列,将字符插入到字符串中间或附加到字符串末尾,StringBuffer 类,StringBuffer 用于表示可以修改的字符串 使用连接运算符(+)的字符串会自动创建字符串缓冲对象,StringBuffer 类的方法,St

20、ringBuffer 类的方法,String与StringBuffer的转换,产生一个內容与String对象str相同的StringBufffer对象:StringBuffer ss=new StringBuffer(str);产生一个內容与StringBuffer对象ss相同的String对象:String s=ss.toSting();,class demoOfStringBuffer public static void main(String buf)StringBuffer ss=new StringBuffer(abc);(buffer=+ss);(“length=”+ss.len

21、gth();(capacity=+ss.capacity();,运行结果:buffer=abclength=3capacity=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);inde

22、x=23;buf.setCharAt(index,.);int start=24;int end=25;buf.replace(start,end,“6);String s=buf.toString();/转换为字符串 System.out.println(s);,Java Student Guide Ver1.6,class StringOp public static void main(String args)String s1=1234567;StringBuffer s2=new StringBuffer(abc);System.out.println(s1.substring(5)

23、;System.out.println(s1.concat(s2.toString();if(pareTo(s2.toString()=0)System.out.println(s1与s2相等);elseSystem.out.println(s1与s2不相等);int i=s1.length();s2=new StringBuffer(i);for(int j=i-1;j=0;j-)s2.append(s1.charAt(j);System.out.println(Integer.parseInt(s1);System.out.println(字符串s2:+s2);,1.C和C+的字符串只是简

24、单的以0结尾的字符数组,而Java中,字符串是一个封装的对象,这种处理对于编程者提供了许多有利之处。2.C和C+中可以通过指针直接对字符串所在的内存地址进行操作,并且不对越界情况进行检查,Java中只能通过类String或StringBuffer所提供的方法对字符串进行操作,并且要对越界情况进行检查并报告,这样大大增加了安全性。,Java与C和C+处理字符串的差别,编程练习,输入的一个字符串中包含了一个人的姓名、性别和年龄。中间用空格隔开。要求从该字符串中提取出姓名、性别和年龄并赋给相应的变量。表示年龄的变量是整型的。,搜索字符串S中是否包含s1,如果包含,则替换为s2。注意s1和s2的长度不

25、一定相等。,数组,数组是一种最简单的复合数据类型,是一组同类型有序数据的集合。数组分为一维数组和多维数组。数组的元素既可以是简单类型,也可以是引用类型。,Java中创建数组的步骤,声明数组创建数组空间,声明一维数组的两种形式 数组元素类型数组名;数组元素类型 数组名;,一 维 数 组,创建数组空间 数组名new 数组元素类型元素个数;,可以为基本类型或复合类型,不能指出数组中元素的个数,int a;,float f1,f2;,a=new int3,f1=new float10;f2=new float20;,简单类型数组分配内存示意图,0 xb1ca,int a;int a;定义一个int类型

26、的数组变量,给变量a分配1个存储空间,初始化为null。,a=new int3;申请3个int类型的存储空间,并将首地址赋给变量a,0 xb1ca,int a;int a=new int3,float f1,f2;f1=new float10;f2=new float20;,一 维 数 组,声明数组和创建数组空间可组合在一起,用一条语句完成。,创建可变长数组,int size;size=();int number=new intsize;,float f=new float10;for(int i=0;if.length;i+)fi=i+10;f=new float20;,根据输入的数据来定义

27、数组长度,在程序中随时修改数组长度,重新定义后数组元素初始化为0,数组元素的引用,数组元素的引用格式 数组元素下标由0开始。最大的下标比数组长度小1。,例:int a=new int5 数组a包含了5个数组元素,分别是:a0,a1,a2,a3,a4,a,整型:0实型:0.0f 或 0.0d字符:0引用类型:null,数组创建后,系统自动为数组元素赋初值。所以数组的创建也称为动态初始化。,数组元素的默认初值,一维数组静态初始化,与声明类型一致的初始值,int intArray=1,2,3,4,5;double decArray=1.1,2.2,3.3;String strArray=Java,B

28、ASIC,FORTRAN;,类型 数组名=元素1,元素2,不能定义大小,边 界 检 查,Java对数组元素进行越界检查。对于每个数组都有一个属性length指明 自身的长度,如:f1.length指明数组f1的长度。,例:为数组元素赋值并逆序输出,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);,运行结果为:a4=4a3=3 a2=2 a1=1a0=0,for-each格式的循环语句,for(Ty

29、pe value:array)expression value;,for(int i=0;ia.length;i+)System.out.println(ai);,for(int x:a)System.out.println(x);,作用:顺次遍历数组中的元素,并将元素的值赋给临时变量。缺点:只能顺次遍历所有元素,无法实现较为复杂的循环只能读取数组元素的值,赋给临时变量,不能给数组元素赋值。,数组名,static double average(double score)int i;double sum=0,ave;for(i=0;iscore.length;i+)sum+=scorei;ave

30、=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;iscorej)temp=scorei;scorei=scorej;scorej=temp;,public class Score public static void main(String args)double a=78,89

31、,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=new type(paramList);arrayName1=new type(paramList);arrayNamearraySize-1=new type(paramList);,对象数组的创建,String string

32、Array;/定义一个String类型的数组变量stringArray=new String3;/给数组变量StringArray分配 3个连续的存储空间,初始化每个引用值为nullstringArray0=new String(“how”);stringArray1=new String(“are”);stringArray2=new String(“you”);,初始化数组元素,对象数组内存分配示意图,stringArray,oxa2b6,String stringArray;stringArray=new String3;stringArray0=new String(“how”);st

33、ringArray1=new String(“are”);stringArray2=new String(“you”);,null,oxa2b6,将学生姓名存储在字符数组中,当输入一个姓名时,进行查找,并给出结果。,public class Search public static void main(String args)int i;String stuName=new String5;Scanner sc=new Scanner(System.in);for(i=0;i=stuName.length)(没找到);,多维数组,在Java语言中,多维数组被看作数组的数组。使用二维数组可方便地

34、处理表格形式的数据。,二维数组的声明,声明二维数组的一般形式为:类型 数组名;或 类型 数组名;或 类型 数组名;,如:int a;int a;int a;,分配存储空间,为二维数组分配空间有两种方法:使用new运算符(动态初始化)静态初始化,在Java语言中,由于把二维数组看作是数组的数组,数组空间不一定连续分配。所以不要求二维数组每一行的大小相同。规则数组:各行的列数相同。不规则数组:各行的列数不同。,1.直接为每一维分配空间,适用于规则数组。type arrayName=new typelength1length2,int a=new int34;,二维数组的动态初始化,2.分别为每一维

35、分配空间(必须从最高维开始)。,111121,int a=new int3a0=new int1a1=new int2a2=new int3,000000000000,适用于不规则的二维数组,简单二维数组内存分配示意图,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(“Go

36、od”);s01=new String(“Luck”);s10=new String(“to”);s11=new String(“you”);s12=new String(“!”);,二维数组的动态初始化,二维数组的静态初始化,静态初始化是在声明数组的同时就为数组元素指定初值。例如:int intArray=1,2,3,4,5,6,7;,不必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。适用于规则数组和不规则数组。intArray0,intArray1长度为2;intArray2长度为3。,对二维数组中每个元素,引用方式为:arrayNameindex1i

37、ndex2 其中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+)for(j=0;jn-i;j+)();for(j=0;j=i;j+)

38、(+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 public static void main(String args)int

39、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_position,int length),类System的静态方法arrayc

40、opy(),可用来进行数组复制。其格式和功能如下:,自学数组操作的常用方法,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:array2)System.out.print(s+);();,程序运

41、行结果如下: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);();,程序运行结果为:3 4 5 6 7 8,使用数组来存储不同类型数据,public cla

42、ss 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可以追加对象元素数量,可以方便的修改和维护序列中的对象。,向量的适用情况,需要将不同类的对象组合成一个数据序列。序列中的元素个数不确

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

44、在创建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);,添加元素实例,import java.util.*;class Aa pub

45、lic 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 obj,int index)将index位置处的对象元素设置为obj,如果

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

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

48、ject 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.println(i);i+;,查找向量序列中的元素,size():返

49、回Vector中元素的数量capacity():返回Vector的容量 clone():建立Vector的备份copyInto(Object):把Vector中的元素拷贝到一个数组中firstElement():返回第一个元素lastElement():返回最后一个元素isEmpty():判断是否为空setSize(int size):设置Vector的大小trimToSize():将Vector的容量下调至最小值,Vector中的其他方法,使用Vector时,一个需要特别注意的问题就是要先创建后使用。如果不先使用new运算符利用构造函数创建Vector类的对象,而直接使用Vector的方法,

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

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号