《数组与字符串处理.ppt》由会员分享,可在线阅读,更多相关《数组与字符串处理.ppt(37页珍藏版)》请在三一办公上搜索。
1、第4章 数组与字符串处理,学习目标:数组的基本概念一维和二维(多维)数组的创建与引用数组的常用操作以及应用举例String类字符串操作常用方法命令行参数,4.1 数组,4.1.1 数组的基本概念问题的引入了解什么是数组以及数组的作用。了解数组前需了解的内存分配的一些背后知识栈内存和堆内存。,数组是多个相同类型的数据的组合,实现对这些数据的统一管理,数组中的每一个数据也叫数组的一个元素。数组的定义:数据类型 数组名;数组的创建:数组名=new 数据类型数组长度解释下面这句代码的语法:int x=new int100;,因此,也可以将这一行代码分成两行来写:int x;/定义了一个数组x,x=ne
2、w int100;/数组初始化;内存状态分别如下:,也可以改变x的值,让它指向另外一个数组对象,或者不指向任何数组对象。要想让x不指向任何数组对象,只需要将常量null赋值给x。如:x=null;,这条语句执行完后的内存状态如图:,在java中,还可以用下面的方式定义数组:int x;/方括号()位于变量名之前x=new int100;,4.1.2 数组的静态初始化可以在定义数组的同时就为数组元素分配空间并赋值,也就是对数组的静态初始化。如:int ia=1,2,3,4;等号右边相当于产生了一个数组对象,该数组有4个元素变量,这4个变量的取值分别是整数1、2、3、4。数组的长度等于右边中的元素
3、的个数。,有时也能见到下面定义数组的方式:int ia=new int 3,4,5;注意:在java语言中声明数组时,无论用何种方式定义数组,都不能指定其长度,例如下面的定义将是非法的;int a5;,4.1.3 使用数组时要注意的问题必须对数组引用变量赋予一个有效的数组对象(通过new产生或是用静态初始化而产生)后,才可以引用数组中的每个元素。需要注意:如下代码int ia=new int 1,2,3,4,5;,这行代码中定义了一个ia数组,它里面包含了5个元素,分别是:ia0=1ia1=2ia2=3ia3=4ia4=5也就是说数组的第一个元素是ia0,而不是ia1,最后一个元素是ia4,而
4、不是ia5,如果创建了一个100个元素的数组,并且试图访问元素a100(或任何在099之外的下标),程序就会引发”array index out of bounds”异常而终止执行。要想获得数组中的元素个数,可以引用array.length。例如:for(int i=0;ia.length;i+)System.out.println(ai);一旦创建了数组,就不能再改变它的大小(当然,尽管可以改变每一个数组元素)。,“for each”循环,for each循环是一种功能很强的循环结构,可以用来一次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心。这种for循环的语句格式
5、为:for(variable:collection)statement定义一个变量用于暂存集合中的每一个元素,并执行相应的语句。例如:for(int element:a)System.out.println(element);,4.1.4 多维数组在java中并没有真正的多维数组,只有数组的数组。虽然应用上很像C中的多维数组,但还是有区别的。在C中定义一个二维数组,必须是一个x*y二维矩阵块,Java中多维数组不一定是规则矩阵形式,如:定义多维数组:数据类型 数组名;数据类型 数组名;int xx;,int xx;xx=new int3;xx0=new int3;xx1=new int2;xx
6、0和xx1的长度可以不一样,数组对象中也可以只有一个元素。程序运行到这之后的内存分配情况如图:,如果数组对象正好是一个x*y形式的规则矩阵,则不必像上面的程序一样,先产生高维的数组对象后,再逐一产生低维的数组对象,完全可以用一句代码在产生高维数组对象的同时,产生所有的低维数组对象。int xx=new int 23;,内存布局如图:也可以像一维数组一样,在定义数组的同时就为多维数组元素分配空间并赋值,也就是对多维数组的静态初始化。如:int xx=3,2,7,1,5,6;,与一维数组一样,在声明多维数组时不能指定其长度。,4.1.5 一些与数组操作相关的函数1.数组拷贝在java中,允许将一个
7、数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组。int luckyNumbers=smallPrimes;luckyNumbers5=12;/now smallPrimes5 is/also 12,如果希望将一个数组的所有值拷贝到另一个数组中去,就要使用System类的arraycopy方法。调用这个方法的语法格式为:System.arraycopy(from,fromIndex,to,toIndex,count);数组to必须有足够的空间来存放拷贝的元素。int smallPrimes=2,3,5,7,11,13;int luckyNumbers=1001,1002,1003,
8、1004,1005,1006,1007;System.arraycopy(smallPrimes,2,luckyNumbers,3,4);for(int i=0;i luckyNumbers.length;i+)System.out.println(i+“:”+luckyNumbersi);,输出结果为:0:10011:10022:10033:54:75:116:13,2.数组的排序sort()方法属于util包中的Arrays类。使用方法:public static void sort(数据类型 a)public static void sort(数据类型 a,int formIndex,i
9、nt toIndex)例如,以下程序将产生一个抽奖游戏中的随机数值组合。假如抽奖是“从49个数值中抽取6个”,那么程序可能的输出结果为:4 7 8 19 30 44,要想选择这样一个随机的数值集合,就要首先将数值1,2,3,n存入数组numbers中:int numbers=new intn;for(int i=0;i numbers.length;i+)numbersi=i+1;而用第二个数组存放抽取出来的数值:int result=new intk;现在,就可以开始抽取k个数值了。Math.random方法将返回一个01之间的随机浮点数。用n乘以这个浮点数,就可以得到0n-1之间的一个随机
10、数。int r=(int)(Math.random()*n);下面将result的第i个元素设置为numbersr存放的数值,最初就是r本身。但正如所看到的那样,numbers数值的内容在每一次抽取之后都会发生变化。resulti=numbersr;因为所有抽奖的数值不能一样,所以必须确保不会再次抽取到那个数值。因此,这里使用数组中的最后一个数值改写numberr,并将n减1。,numbersr=numbersn-1;n-;关键在于每次抽取的都是下标,而不是实际的值。下标指向包含尚未抽取过的数组元素。在抽取了k个数值之后,就可以对result数组进行排序了,这样使得输出效果更加清晰:Array
11、s.sort(result);for(int r:result)System.out.println(r);,4.2 Java 字符串处理,Java中将字符串作为String类型对象来处理。当创建一个String对象时,被创建的字符串是不能被改变的。每次需要改变字符串时都要创建一个新的String对象来保存新的内容。原始的字符串不变。,4.2.1 String构造函数(1)String(),默认构造函数,无参数 Strings1=newString();(2)String(char chars),传入字符数组 char myChars=a,b,c;Strings2=new String(myC
12、hars)/使 用字符串“abc”初始化s2,(3)String(char chars,int startIndex,int numChars)、传入一个字符数组,从指定下标位置开始获取指定个数的字符,用这些字符来初始化字符串变量。char myChars=h,e,l,l,o;String s3=new String(myChars,1,3);/使用字符串“ell”初始化s3(4)String(String strObj),传入另一个字符串对象,用该字符串对象的内容初始化 String s4=new String(s3);/这时s4也是“ell”了。,4.2.2 String类字符串操作常用方
13、法1.求字符串的长度public int length()2.求字符串某个位置的字符public char charAt(int i)3.连接字符串public String concat(String str),4.查找字符串中的某个字符public int indexOf(int ch);public int indexOf(int ch,int fromIndex)public int lastIndexOf(int ch)public int lastIndexOf(int ch,int fromIndex),5.查找字符串中的子串public int indexOf(String s
14、tr)public int indexOf(String str,int fromIndex)public int lastIndexOf(String str)public int lastIndexOf(String str,int fromIndex)获取字符串中的某个字符:public char charAt(int index),6.比较两个字符串public int compareTo(String anotherString)public Boolean equals(Object anotherObject)public Boolean equalsIgnoreCase(Str
15、ing anotherString),4.3命令行参数,前面已经看到多次使用java数组的例子。每一个java应用程序都有一个带String args参数的main方法。这个参数表明main方法将接受一个字符串数组,也就是命令行参数。如:,Public class Message public static void main(String args)if(args0.equals(“-h”)System.out.print(“Hello,”);else if(args0.equals(“-g”)System.out.print(“Goodbye,”);/print the other command line arguments for(int I=1;iargs.length;i+)(“”+ai);(“!”);如果使用下面这种形式调用这个程序:Java Message g cruel world,
链接地址:https://www.31ppt.com/p-6297449.html