《JAVA数组向量字符串(11级).ppt》由会员分享,可在线阅读,更多相关《JAVA数组向量字符串(11级).ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、华华 北北 电电 力力 大大 学学字符串学习的任务 从一个带有路径的文件从一个带有路径的文件名中分离出文件名和路名中分离出文件名和路径径C:Program FilesJdkreadme.htmlC:Program FilesJdkreadme.html华华 北北 电电 力力 大大 学学字符串n在在JavaJava中,字符串被当作对象来处理。中,字符串被当作对象来处理。n字符串分类字符串分类字符串常量字符串常量v创建之后不能再修改。创建之后不能再修改。v用用StringString类来创建字符串常量。类来创建字符串常量。字符串变量字符串变量v创建之后可以做修改。创建之后可以做修改。v一般用一般用
2、StringBufferStringBuffer类来创建。类来创建。StringString类类和和StringBufferStringBuffer类都在类都在java.langjava.lang包中。包中。华华 北北 电电 力力 大大 学学类String字符串定义q可以用字符串常量直接初始化一个String对象 Strings=HelloWorld;q通过构造方法构造方法构造方法说说明明String()它将创建一个空字符串String(Stringoriginal)根据指定字符串,创建一个新字符串String(charvalue)根据字符数组构造一个新字符串String(bytevalue)
3、根据指定的字节数组,新建一个字符串 char chars =a,b,c;String s=new String(chars);String s=new String(“hello”);或:或:String s=“hello”;String s=new String();byte bytestr=97,98,99;byte bytestr=97,98,99;String s=new String(bytestr);String s=new String(bytestr);华华 北北 电电 力力 大大 学学字符串变量和普通变量的区别String构造方法的使用举例 public static voi
4、d main(String args)String s,s1,s2,s3,s4,s5,s6,s7;byte byteArray =(byte)J,(byte)a,(byte)v,(byte)a;char charArray=程,序,设,计,课,程;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
5、 String(byteArray,0,1);Hello!Hello!程序设计课程设计课程JavaJ华华 北北 电电 力力 大大 学学字符串长度由 length()方法确定语法语法public int length();返回字符串中的字符数String的常用方法字符串长度String name=John Smith;(name.length();华华 北北 电电 力力 大大 学学String的常用方法字符串比较字符串变量 1字符串变量 2字符串变量字符串变量1字符串变量字符串变量2由 equals()方法确定检查字符串变量指向的字符串是否相等同一个对象用=运算符检查检查字符串变量是否指向同一个
6、字符串对象华华 北北 电电 力力 大大 学学 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.print
7、ln(t1=t3);System.out.println(t1.equals(t3);字符串比较举例字符串比较举例程序运行结果如下:程序运行结果如下:falsefalsefalsetruetruetrue华华 北北 电电 力力 大大 学学字符串比较方法方法方法说说明明booleanequalsIgnoreCase(Stringvalue)比较两个字符串,忽略大小写intcompareTo(Stringvalue)比较两个字符串,返回两者之间的差值。如果两个字符串相等,则返回 0。booleanstartsWith(Stringvalue)检查一个字符串是否以另一个字符串开始booleanend
8、sWith(Stringvalue)检查一个字符串是否以另一个字符串结束华华 北北 电电 力力 大大 学学字符串连接 在在JavaJava中,运算符中,运算符“”可以用来实现字符串的可以用来实现字符串的连接,如:连接,如:String s=“He is”+age+”years old.”String s=“He is”+age+”years old.”假设整数型变量假设整数型变量ageage的值为的值为1515,那么,那么,s s的值为的值为“He is 15 years old”“He is 15 years old”。华华 北北 电电 力力 大大 学学搜索字符和字符串字符串字符串1情形情形
9、1:indexOf(character)方法方法找到第一个匹配索引 0 1 2 3情形情形2:如果没有找到匹配,则返回-1返回找到的第一个匹配的位置索引华华 北北 电电 力力 大大 学学方法方法说说明明int indexOf(int ch)返回字符ch在字符串中出现的第一个位置int lastIndexOf(int ch)返回字符ch在字符串中出现的最后一个位置int indexOf(String str)返回子串str首字符在字符串中第一次出现的位置int lastindexOf(String str)返回子串str首字符在字符串中最后出现的位置搜索字符和字符串华华 北北 电电 力力 大大
10、学学搜索字符串举例_判断邮箱正确性public class SearchString public class SearchString public static void main(String args)public static void main(String args)String email=JohnS;String email=JohnS;int n1=emailint n1=email.indexOf().indexOf();int n2=emailint n2=email.indexOf(.).indexOf(.);if(if(n1n2 n1=0;j-)s2.append(
11、s1.charAt(j);System.out.println(Integer.parseInt(s1);System.out.println(字符串s2:+s2);华华 北北 电电 力力 大大 学学1.C1.C和和C+C+的字符串只是简单的以的字符串只是简单的以00结尾的字符数组,结尾的字符数组,而而JavaJava中,字符串是一个封装的对象中,字符串是一个封装的对象,这种处理对,这种处理对于编程者提供了许多有利之处。于编程者提供了许多有利之处。2.C2.C和和C+C+中可以通过指针直接对字符串所在的内存中可以通过指针直接对字符串所在的内存地址进行操作,并且不对越界情况进行检查,地址进行操作
12、,并且不对越界情况进行检查,JavaJava中只能通过类中只能通过类StringString或或StringBufferStringBuffer所提供的方法所提供的方法对字符串进行操作对字符串进行操作,并且要对越界情况进行检查并,并且要对越界情况进行检查并报告,这样大大增加了安全性。报告,这样大大增加了安全性。Java与C和C+处理字符串的差别华华 北北 电电 力力 大大 学学编程练习q输入的一个字符串中包含了一个人的姓名、性别输入的一个字符串中包含了一个人的姓名、性别和年龄。中间用空格隔开。和年龄。中间用空格隔开。要求从该字符串中提取出姓名、性别和年龄并赋要求从该字符串中提取出姓名、性别和年
13、龄并赋给相应的变量。表示年龄的变量是整型的。给相应的变量。表示年龄的变量是整型的。q搜索字符串搜索字符串S S中是否包含中是否包含s1s1,如果包含,则替换为,如果包含,则替换为s2s2。注意。注意s1s1和和s2s2的长度不一定相等。的长度不一定相等。华华 北北 电电 力力 大大 学学数组p数组是一种最简单的复合数据类型,是一组同类型有序数据的集合。p数组分为一维数组和多维数组。p数组的元素既可以是简单类型,也可以是引用类型。华华 北北 电电 力力 大大 学学Java中创建数组的步骤q声明数组q创建数组空间华华 北北 电电 力力 大大 学学q声明一维数组的两种形式 数组元素类型数组名;数组元
14、素类型 数组名;一一 维维 数数 组组q创建数组空间 数组名new 数组元素类型元素个数;可以为基本类型或复合类型不能指出数组中元素的个数 int a;float f1,f2;a a=new int3f1=new float10;f2=new float20;华华 北北 电电 力力 大大 学学简单类型数组分配内存示意图0 xb1ca a0 a1 a2int a;int a;定义一个定义一个intint类型的数组变量,给变量类型的数组变量,给变量a a分配分配1 1个存个存储空间,初始化为储空间,初始化为nullnull。anulla=new int3;申请申请3 3个个intint类型的存储空
15、间,并将首地址赋给变量类型的存储空间,并将首地址赋给变量a a0 xb1ca华华 北北 电电 力力 大大 学学int a;int a=new int3 float f1,f2;f1=new float10;f2=new float20;int a a=new int3float f1=new float10;float f2=new float20;一一 维维 数数 组组q声明数组和创建数组空间可组合在一起,用一条语句完成。华华 北北 电电 力力 大大 学学创建可变长数组int size;size=();int number=new intsize;float f=new float10;fo
16、r(int i=0;if.length;i+)fi=i+10;f=new float20;q根据输入的数据来定义数组长度q在程序中随时修改数组长度重新定义后数组元素初始化为0华华 北北 电电 力力 大大 学学整型整型:0实型实型:0.0f 或 0.0d字符字符:0引用类型引用类型:null 数组创建后,系统自动为数组元素赋初值。所以数组的创建也称为动态初始化。数组元素的默认初值数组元素的默认初值华华 北北 电电 力力 大大 学学一维数组静态初始化与声明类型一致的初始值int intArray=1,2,3,4,5;double decArray=1.1,2.2,3.3;String strArr
17、ay=Java,BASIC,FORTRAN;类型 数组名 =元素1,元素2 不能定义大小华华 北北 电电 力力 大大 学学边边 界界 检检 查查v Java对数组元素进行越界检查。v 对于每个数组都有一个属性length指明 自身的长度,如:f1.length指明数组f1的长度。华华 北北 电电 力力 大大 学学例:为数组元素赋值并逆序输出例:为数组元素赋值并逆序输出 public class ArrayTestpublic class ArrayTest public static void main(String args )public static void main(String a
18、rgs )int i;int i;int a=new int5;int a=new int5;for(i=0;i for(i=0;i=0;i-);i=0;i-)System.out.println(a+i+=+ai);System.out.println(a+i+=+ai);运行结果为:运行结果为:a4=4a4=4a3=3 a3=3 a2=2 a2=2 a1=1a1=1a0=0a0=0for-each格式的循环语句for(Typevalue:array)expressionvalue;for(int i=0;ia.length;i+)System.out.println(ai);for(int
19、 x:a)System.out.println(x);q作用:顺次遍历数组中的元素,并将元素的值赋给临时变量。q缺点:q只能顺次遍历所有元素,无法实现较为复杂的循环只能顺次遍历所有元素,无法实现较为复杂的循环q只能读取数组元素的值,赋给临时变量,不能给数组元素赋值。只能读取数组元素的值,赋给临时变量,不能给数组元素赋值。数组名华华 北北 电电 力力 大大 学学1.创建数组 type arrayName=new typearraySize;2.创建每一个数组元素 arrayName0=new type(paramList);arrayName1=new type(paramList);array
20、NamearraySize-1=new type(paramList);对象数组的创建华华 北北 电电 力力 大大 学学对象数组内存分配示意图对象数组内存分配示意图stringArrayoxa2b6how0 xb1caare0 xd3cayou0 xa5c7oxa2b60 xb1ca0 xd3ca0 xa5c7StringstringArray;stringArray=newString3;stringArray0=newString(“how”);stringArray1=newString(“are”);stringArray2=newString(“you”);nullnullnulln
21、ulloxa2b6华华 北北 电电 力力 大大 学学将学生姓名存储在字符数组中,当输入一个姓名时,进行查找,并给出结果。public class Searchpublic class Search public static void main(String args)public static void main(String args)int i;String stuName=new String5;Scanner sc=new Scanner(System.in);for(i=0;istuName.length;i+)stuNamei=sc.next();(输入要查的学生:);Strin
22、g xm=new String();xm=sc.next();for(i=0;i=stuName.length)(没找到);华华 北北 电电 力力 大大 学学多维数组q在Java语言中,多维数组被看作数组的数组。q使用二维数组可方便地处理表格形式的数据。华华 北北 电电 力力 大大 学学二维数组的声明声明二维数组的一般形式为:类型 数组名 ;或 类型 数组名;或 类型 数组名;如:如:int int aa;int int a;a;int int a;a;华华 北北 电电 力力 大大 学学分配存储空间 为二维数组分配空间有两种方法:q 使用new运算符(动态初始化)q 静态初始化在Java语言中
23、,由于把二维数组看作是数组的数组,数组空间不一定连续分配。所以不要求二维数组每一行的大小相同。p 规则数组:各行的列数相同。p 不规则数组:各行的列数不同。华华 北北 电电 力力 大大 学学1.1.直接为每一维分配空间,适用于规则数组。直接为每一维分配空间,适用于规则数组。type arrayName =new typelength1length2int a =new int34;二维数组的动态初始化2.2.分别为每一维分配空间(必须从最高维开始)。分别为每一维分配空间(必须从最高维开始)。111121int a=new int3a0=new int1a1=new int2a2=new int
24、3000000000000适用于不规则的二维数组华华 北北 电电 力力 大大 学学 例如: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(“!”);二维数组的动态初始化华华 北北 电电 力力 大大 学学二维数组的静态初始化静态初始化是在声明数组的同时就为数组元素指定初值。例如:int intArray=1,2,3,4,5,6,7;q不
25、必指出数组每一维的大小,系统会根据初始化时给出的初始值的个数自动算出数组每一维的大小。q适用于规则数组和不规则数组。intArray0,intArray1长度为2;intArray2长度为3。华华 北北 电电 力力 大大 学学 对二维数组中每个元素,引用方式为:对二维数组中每个元素,引用方式为:arrayNameindex1index2 其中其中index1index1和和index2index2是数组下标,为整型常数是数组下标,为整型常数和整型表达式,都是从和整型表达式,都是从0 0开始的。开始的。二维数组元素的引用public class Yanghuipublic static void
26、 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+)(+matij);();例:输出杨辉三角华华 北北 电电 力力 大大 学学数组操作的常用方法public static void arraycopy(Object src,int src_po
27、sition,Object dst,int dst_position,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
28、,2,5);System.out.print(array2:);for(int s: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(Strin
29、g args)int a=8,6,7,3,5,4,i;Arrays.sort(a);for(int s:a)(+s);();程序运行结果为:3 4 5 6 7 8华华 北北 电电 力力 大大 学学向量的介绍q向量向量(Vector)Vector)是是java.utiljava.util类包提供的一个工类包提供的一个工具类。具类。q它是允许它是允许不同类型元素共存的元素共存的变长数组。q每个每个VectorVector类的对象可以表达一个完整的数据类的对象可以表达一个完整的数据序列。序列。qVectorVector可以追加对象元素数量,可以方便的修可以追加对象元素数量,可以方便的修改和维护序列中
30、的对象。改和维护序列中的对象。华华 北北 电电 力力 大大 学学向量的适用情况q需要将需要将不同类的对象组合成一个数据序列。组合成一个数据序列。q序列中的序列中的元素个数不确定。q序列中的序列中的元素都是对象或可以表示为对象。或可以表示为对象。q需要做频繁的需要做频繁的查询、插入或删除等操作。q在不同的类之间在不同的类之间传递大量的数据。华华 北北 电电 力力 大大 学学 Vector类有三个构造方法:类有三个构造方法:lVector():构造一个长度为10的空向量。lVector(int capacity)以指定的存储容量构造一个空向量。lVector(int capacity,int ca
31、pacityIncrement)以指定的存储容量和容量增量构造一个空向量。创建向量华华 北北 电电 力力 大大 学学 Vector MyVector=new Vector(100,50);创建的MyVector向量序列初始有100个元素的空间,以后一旦使用殆尽则以50为单位递增,使序列中元素的个数变化成150,200,。在创建Vector序列时,不需要指明序列中元素的类型,可以在使用时确定。创建向量华华 北北 电电 力力 大大 学学qaddElementaddElement(Object(Object objobj)将新元素添加到序列尾部。将新元素添加到序列尾部。qinsertElementA
32、t(ObjectinsertElementAt(Object objobj,intint index)index)将新元素插入到指定位置。将新元素插入到指定位置。向向量序列中添加元素插入位置华华 北北 电电 力力 大大 学学Vector MyVector=new Vector()Vector MyVector=new Vector();for(int i=1;i=10;i+)for(int i=1;i=10;i+)MyVector.addElement(MyVector.addElement(new Integer(i)new Integer(i););MyVector.insertEleme
33、ntAt(MyVector.insertElementAt(middle,5);middle,5);添加元素实例华华 北北 电电 力力 大大 学学import java.util.*;import java.util.*;class Aaclass Aa public static void main(String arg)public static void main(String arg)Vector MyVector=new Vector();Vector MyVector=new Vector();for(int i=1;i=10;i+)for(int i=1;i=10;i+)MyVe
34、ctor.addElement(new Integer(i);MyVector.addElement(new Integer(i);MyVector.insertElementAt(middle,5);MyVector.insertElementAt(middle,5);for(int i=0;i=10;i+)for(int i=0;i=10;i+)System.out.println(MyVector.elementAt(i);System.out.println(MyVector.elementAt(i);添加元素实例运行结果:12345middle678910华华 北北 电电 力力 大大
35、 学学qsetElementAt(ObjectsetElementAt(Object obj,intobj,int index)index)将index位置处的对象元素设置为obj,如果这个位置原来有元素,则被覆盖。qremoveElement(ObjectremoveElement(Object objobj)删除与指定的obj对象相同的第一个元素,同时将后面的元素前提,补上空位。返回值是布尔值。qremoveElementAt(intremoveElementAt(int index)index)删除index指定位置处的元素,将后面的元素前提。qremoveAllElementsremo
36、veAllElements()():清除序列中的所有元素。元素的修改或删除华华 北北 电电 力力 大大 学学Vector MyVector=new Vector(100);Vector MyVector=new Vector(100);for(int i=0;i10;i+)for(int i=0;i10;i+)MyVector.addElement(“welcome”);MyVector.addElement(“welcome”);MyVector.addElement(“to”);MyVector.addElement(“to”);MyVector.addElement(“beijing”)
37、;MyVector.addElement(“beijing”);while(MyVector.removeElement(“to”);while(MyVector.removeElement(“to”);向量实例添加删除元素华华 北北 电电 力力 大大 学学 1.Object elementAt(int index)Object elementAt(int index)返回指定位置处的元素。一个要注意的问题:由于返回的是Object类型的对象,在使用之前通常需要进行强制类型转换强制类型转换,将返回的对象引用转换成Object类的某个具体子类的对象。例如:String str=(String)M
38、yVector.elementAt(0);2.boolean contains(Object obj)boolean contains(Object obj)检查向量序列中是否包含指定的对象元素obj。查找向量序列中的元素 3.int indexOf(Object obj,int start_index)int indexOf(Object obj,int start_index)从指定的start_index位置开始向后搜索向后搜索,返回所找到的第一个与指定对象obj相同的元素的下标位置。若指定的对象不存在,则返回1。4.int lastIndexOf(Object obj,int star
39、t_index)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()size():返回Vector中元素的数量capacity()capacity():返回Vector的容量 clone()clone():建
40、立Vector的备份copyInto(Object)copyInto(Object):把Vector中的元素拷贝到一个数组中firstElement()firstElement():返回第一个元素lastElement()lastElement():返回最后一个元素isEmpty()isEmpty():判断是否为空setSize(int size)setSize(int size):设置Vector的大小trimToSize()trimToSize():将Vector的容量下调至最小值 Vector中的其他方法华华 北北 电电 力力 大大 学学例题:用向量实现,创建3个学生对象(学号、姓名、年
41、龄)和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;public Tech(String gh1,String xm1,String xb1)gh=gh1;xm=xm1;xb=xb1;void disp()(教师:+gh+xm+x
42、b);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(103,刘萍,19);st.addElement(new Tech(10100,林小利,计算机);st.addElement(new Tech(10101,熊平,计算机);st.addElement(new Tech(10102,戴红兵,电力);st.addEle
43、ment(new Tech(10103,曲小军,电力);for(int i=0;i=0)s1.replace(l,l+s2.length(),s3);System.out.print(s1.toString();华华 北北 电电 力力 大大 学学用二维数组实现,用二维数组实现,5个学生个学生7门课程的总分和门课程的总分和平均分的统计工作。平均分的统计工作。import java.util.*;public class Cj public static void main(String args)int cj=new int57,i,j,sum=0,aver;Scanner sc=new Scanner(System.in);for(i=0;i5;i+)for(j=0;j7;j+)cjij=sc.nextInt();sum+=cjij;System.out.print(sum/35);华华 北北 电电 力力 大大 学学作业说明q邮箱:q文件命名:学号-题号.java 20-1.java 20-2.javaq 只提交正确的.java文件,如有错误,注明错误现象。q邮件主题:班级+姓名华华 北北 电电 力力 大大 学学下课了!下课了!
限制150内