《数组和字符串4》由会员分享,可在线阅读,更多相关《数组和字符串4(51页珍藏版)》请在金锄头文库上搜索。
1、第10章 数组和字符串,本章要点: 数组的初始化 数组的拷贝 命令行参数 String类 StringBuffer类 使用StringTokenizer类分析字符串 Character类 字符串与字符、字节数组,10.1 数组,10.1.1 数组的声明 在Java中声明一个数组是很简单的。要想声明一个数组,要先声明数组的类型,再声明数组变量的名字。例如:下面的形式声明了一个整数数组a: int a; 或 int a; 这两种形式都是可以接受的,请读者根据个人的爱好选择,但习惯上倾向于采用第一种形式。再如:根据我们设计的学生类,想声明一个学生类的数组,则可以采用如下格式: Student aSt
2、udent; 或 Student aStudent; 在这里我们强调两件事情: (1)我们声明整数数组a的类型是int型,指的是整数数组a中的每一个元素都是int型的,不能再出现其他的类型。如果声明为String类型的,则数组内的每一个元素都是String类型的。 (2)声明一个数组如同声明其他任何类型的变量一样,也必须指明数组的类型。数组的类型也就是数组内每一个元素的类型。,10.1.2 数组的初始化 要想初始化一个数组,有隐式和显式初始化两种方式。 1. 隐式初始化 用户可以像实例化一个对象一样采用关键字new来实现。如初始化整数数组a: int a = new int100; 或 int
3、 a= new int100; 再如初始化学生类数组 Student aStudent= new Student50; 或 Student aStudent = new Student50; 这两种形式分别初始化整数数组a的容量为100,学生数组aStudent的容量为50,也就是说,在数组内最大的元素个数分别是100和50,也只能容纳100和50个元素。,2. 显式初始化 所谓显式初始化,也就是在声明一个数组的时候,直接进行数组的赋值。如声明一个具有5个元素的整数数组b: int b = 1, 2, 3, 4, 5; 注意:在这种初始化方式中,我们没有使用关键字new,也没有指定数组元素的个
4、数。但这样做是可行的,系统会自动计算数组元素的个数,创建一个固定容量的数组。 有时我们需要得到数组容量的大小,这时有一个特殊的方法,例如,我们要得到整数数组b的容量,可以采用如下的格式: b.length;/注意这并不是方法的调用,length的后面没有括号。 要知道学生类数组的大小,可以采用如下的格式: aStudent.length; 通过这种方式得到的数值是一个整型的数值,我们可以声明一个整数型变量来接收这个数值,如: int studentNumber = aStudent.length;,10.1.3 匿名数组 在数组中,有一种称为匿名数组的形式。顾名思义,也就是没有名字的数组,换句
5、话说,就是声明一个数组但并没有与一个数组变量关联起来。如: new int10, 20,30,40,50; 根据以前我们的讲述,操纵对象都是通过对象句柄来操纵的,那么声明一个匿名数组有什么作用呢?声明一个匿名数组的目的是将一个新的匿名数组赋值与一个已经存在的数组变量,而不用再重新生成一个新的数组变量,但已经存在的数组变量的类型一定要与匿名数组的类型一致。如: int array = 1, 2, 3; array = new int10, 20,30,40,50; 这是完全可以的,我们可以不必考虑原来数组的大小,而重新生成一个新的数组,让已经存在的数组变量重新指向一个新的数组对象,系统会自动计算
6、新的数组对象的长度(容量)。下面我们用一个很简单的程序来测试一下。,例10-2 程序清单 ArrayTest.java /* * 通过这个程序,我们要测试两个方面: * 1. 匿名数组可以赋值与一个已经存在的数组变量,不关心原来数组变量的容量 * 2. 数组变量的类型必须要与匿名数组的类型一致 */ public class ArrayTest public static void main(String args) ArrayTest aTest = new ArrayTest(); int a = 1, 2, 3;/声明一个新的数组,并赋值与一个新的数组变量 aTest.print(a);
7、 a = new int 10, 20, 30, 40, 50;/将整型匿名数组赋值与存在的数组变量a /a = new String “a“, “b“;/将字符型匿名数组赋值与存在的数组变量a aTest.print(a); public void print(int array) System.out.println(“ 数组变量的长度是 “ + array.length); System.out.println(“ 数组中的每个元素是: “); for (int i = 0; i array.length; i+) System.out.print(“ “ + arrayi);/打印出数
8、组中的每一个元素 System.out.println(“n*“); ,10.1.4 数组的拷贝 由于数组本身属于对象类型,它在Java公开库中有一个类与之相对应Arrays类。当数组变量传递给另外一个数组变量时,它们传递的是对象句柄,也就是按址传递。例如: int a = 1, 2, 3, 4, 5; int b = a; 如果我们访问a4,它是指向5的,如果访问b4,它同样也是指向5的。,例10-3 程序清单 ArrayPointer.java /* * 测试数组元素传递方式 */ public class ArrayPointer public static void main(Stri
9、ng args) ArrayPointer aPointer = new ArrayPointer(); int a = 1, 2, 3, 4, 5; System.out.println(“打印数组a中的元素。“); aPointer.print(a); int b = a; System.out.println(“n改变数组b中的第三个元素的值。n “); System.out.println(“打印数组b中的元素。“); b2 = a2 + 10; aPointer.print(b); System.out.println(“再打印数组a中的元素。“); aPointer.print(a
10、); public void print(int array) for (int i = 0; i array.length; i+) System.out.print(“ “ + arrayi);/打印出数组中的每一个元素 System.out.println(“n*“); ,例10-4 程序清单 ArrayCopy.java /* * 测试数组元素拷贝 */ public class ArrayCopy public static void main(String args) ArrayCopy aCopy = new ArrayCopy(); int a = 1, 2, 3, 4, 5;
11、 int b = 10,20,30,40,50; aCopy.copy(a, b); public void copy(int from, int to) System.out.println(“第一个数组中的元素“); for (int i = 0; i from.length; i+) System.out.print(“ “ + fromi);/打印出数组中的每一个元素 ,System.out.println(“n“); System.out.println(“第二个数组中的元素“); for (int i = 0; i to.length; i+) System.out.print(“
12、 “ + toi);/打印出数组中的每一个元素 System.out.println(“nn将第一个数组拷贝到第二个数组n“); System.arraycopy(from, 0, to, 0, 5); System.out.println(“拷贝完成后第二个数组中的元素“); for (int i = 0; i to.length; i+) System.out.print(“ “ + toi);/打印出数组中的每一个元素 ,10.1.5 命令行参数 例10-5 程序清单 CommandInput.java /* *命令行参数的输入,从命令行输入的任何参数,对于Java来讲都是用字符串处理的
13、。 */ public class CommandInput public static void main(String args) if(args.length = 0) System.out.println(“用户没有输出参数,程序退出!“); else System.out.println(“用户一共输入了“ + args.length +“个参数“); if(args0.equals(“h“) System.out.print(“用户好“); if(args0.equals(“g“) System.out.print(“再见“); for(int i = 1; i args.leng
14、th; i+) System.out.print(“ “ + argsi); ,10.1.6 数组排序 例10-6 程序清单 ArraySort.java /* *数组排序及随机数的产生 */ import java.util.Arrays; import javax.swing.*; public class ArraySort public static void main(String args) String strIn = JOptionPane.showInputDialog(“ 请输入一共多少个彩球:“); String strOut = JOptionPane.showInpu
15、tDialog(“ 请输入需抽取多少个彩球:“); int in = Integer.parseInt(strIn); int total = new intin;/生成彩球总数数组 for(int i = 0; i in; i+) totali = i + 1; ,int out = new intInteger.parseInt(strOut); for(int i = 0; i out.length; i+) int r = (int)(Math.random() * in);/产生随机元素序列号 outi = totalr; totalr = totalin - 1;/将最后一个元素移到当前位置,把取出的删除 in-; Arrays.sort(out); System.out.println(“抽取的数字排序后是:“); for(int i = 0; i out.length; i+) System.out.print(“ “ + outi); System.exit(0); ,10.2 文本处理类,文本的处理在程序中是不可缺少的一部分,如何有效地在程序中进行文本的处