第四章数组与字符串_第1页
第四章数组与字符串_第2页
第四章数组与字符串_第3页
第四章数组与字符串_第4页
第四章数组与字符串_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章数组与字符串 第四章第四章 数组与字符串数组与字符串第四章数组与字符串概念n数组是一组同类型的变量或对象的集合n数组的类型可以是基本类型,或类和接口n数组中每个元素的类型相同n引用数组元素通过数组名下标n数组下标(数组的索引)从0开始n数组是一种特殊的对象(Object)n定义类型 (声明)n创建数组 (分配内存空间) : newn一维数组、多维数组第四章数组与字符串一维数组n一维数组的元素只有一个下标变量n例: A1, c3n一维数组的声明n方法1: 类型 数组名; nString args; int a; double amount; char c;n方法2: 类型 数组名;nStr

2、ing args; int a; double amount; char c;n注意n类型是数组中元素的数据类型(基本和构造类型)n数组名是一个标识符n数组声明后不能被访问,因未为数组元素分配内存空间double d;System.out.println(d0);第四章数组与字符串一维数组n数组的创建n用new来创建数组n为数组元素分配内存空间,并对数组元素进行初始化n格式: 数组名 = new 类型数组长度n例: a = new int3;n声明和创建的联用: int a = new int3;n默认赋初值n整型初值为0 int i = new int3;n实型初值为0.0 float f

3、= new float3;n布尔型初值为false boolean b = new boolean3;第四章数组与字符串一维数组n一维数组的初始化n方式一: 在声明数组的同时对数组初始化n格式: 类型 数组名 = 元素1, 元素2 ;nint a = 1, 2, 3, 4, 5;n方式二: 声明和创建数组后用new对数组初始化形式如下: 数组名=new 类型标识符数组长度例如:int intArray;intArray=new int3n一维数组的引用 数组名下标 下标可以为整型常数或表达式nJava对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度,

4、例如:a.length指明数组a的长度 第四章数组与字符串【示例4-1】ArrayTest.java演示Java语法定义数组和引用数组元素的方式 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=4 a3=3 a2=2 a1=1 a0=0 第四章数组与字符串【示例4-2】classFibonacci.javapublic class ClassFibon

5、acci public static void main(String args) int i; int f=new int10; f0=f1=1; for(i=2;i10;i+) fi=fi-1+fi-2; for(i=1;i=10;i+) System.out.println(F+i+=+fi-1); 程序运行结果:程序运行结果: F1=1 F2=1 F3=2 F4=3 F5=5 F6=8 F7=13 F8=21 F9=34 F10=55 第四章数组与字符串多维数组n数组的数组nArrays of Arraysn例: 表格(行和列)n以二维数组为例第四章数组与字符串二维数组n二维数组的声明

6、n类型 数组名, 例 int a;n数组声明后不能被访问,因未为数组元素分配内存空间n二维数组的创建n方法一: 直接分配空间例 int a = new int23; a00 a01 a02 a10 a11 a12两个一维数组,每个数组包含3个元素第四章数组与字符串二维数组n二维数组的创建n方法二: 从最高维开始,为每一维分配空间例 int c = new int2; c0 = new int4; c1 = new int3; c00 c01 c02 c03 c10 c11 c12 n注: 为数组分配空间需指定维数大小,至少最高维(最左边)大小n错误: int b = new int;第四章数组

7、与字符串二维数组n二维数组的初始化n每个元素单独进行赋值class Test public static void main (String args) int a = new int33;a00=1;a11=1;a22=1;System.out.println(“数组a: ”);for (int i=0; i a.length; i+)for (int j=0; jai.length; j+)System.out.print(aij+“ ”);System.out.println();最高维数组长度 1 0 00 1 00 0 1第四章数组与字符串二维数组n二维数组的初始化n声明数组的同时初

8、始化 例 int a = 1,2,3, 3,4,5; a00=1 a01=2 a02=3 a10=3 a11=4 a12=5n对数组元素的引用n数组名下标1 下标2n下标为非负的整型常数第四章数组与字符串【示例4-3】MatrixMultiply.javapublic class MatrixMultiply public static void main(String args) int i,j,k; int a=new int23; int b=1,5,2,8,5,9,10,-3,2,7,-5,-18; int c=new int24; for(i=0;i2;i+) for(j=0;j3;

9、j+) aij=(i+1)*(j+2); for(i=0;i2;i+) for(j=0;j4;j+) cij=0; for(k=0;k3;k+) cij+=aik*bkj; /矩阵相乘 第四章数组与字符串【示例4-3】MatrixMultiply.javaSystem.out.println(n*MatrixA*); for(i=0;i2;i+) for(j=0;j3;j+) System.out.print(aij+); System.out.println(); System.out.println(n*MatrixB*); for(i=0;i3;i+) for(j=0;j4;j+) Sy

10、stem.out.print(bij+); System.out.println(); System.out.println(n*MatrixC*); for(i=0;i2;i+) for(j=0;j4;j+) System.out.print(cij+); System.out.println(); 程序运行结果程序运行结果: *MatrixA* 2 3 4 4 6 8 *MatrixB* 1 5 2 8 5 9 10 -3 2 7 -5 -18 *MatrixC* 25 65 14 -65 50 130 28 -130 第四章数组与字符串【示例4-4】TwoArrayAgain.java】

11、不规则数组示例public class TwoArrayAgainpublic static void main(String args)int twoArray = new int4; /声明二维数组twoArray0 = new int1;/ 定义每一行twoArray1 = new int2;twoArray2 = new int3;twoArray3 = new int4; int i, j, k = 0;for(i=0; itwoArray.length; i+)for(j=0;jtwoArrayi.length ;j+,k+)twoArray ij = k;for(i=0; itw

12、oArray.length; i+) for(j=0;jtwoArrayi.length;j+) System.out.print(twoArrayij + );System.out.println();程序运行结果:程序运行结果:0 1 2 3 4 5 6 7 8 9第四章数组与字符串对数组对象的操作(Arrays)java.util.Arraysn全部是静态方法npublic static int binarySearch(type a, type key) npublic static int binarySearch(type a,int fromIndex,int toIndex,t

13、ype key)npublic static boolean equals(type a, type a2)npublic static void fill(type a, type val)npublic static void fill(type a, int fromIndex, int toIndex, type val)npublic static void sort(type a)npublic static void sort(type a,int fromIndex,int toIndex) npublic static void type copyOf(type origin

14、al,int newLength) npublic static void type copyOfRange(type original,int from,int to) nPublic static String toString(type a) boolean, char, type, short, int, long, double, floatObject注意:Arrays类处于java.util包下,为了在程序中使用Arrays类,必须在程序中导入java.util.Arrays类 第四章数组与字符串示例4-5】UsingArrays.javaimport java.util.*;p

15、ublic class UsingArrays public static void main(String args)/定义一个a数组int a = new int3, 4 , 5, 6;/定义一个a2数组int a2 = new int3, 4 , 5, 6;/a数组和a2数组的长度相等,每个元素依次相等,将输出trueSystem.out.println(a数组和a2数组是否相等: + Arrays.equals(a , a2);/通过复制a数组,生成一个新的b数组int b = Arrays.copyOf(a, 6);System.out.println(a数组和b数组是否相等: +

16、Arrays.equals(a , b);/输出b数组的元素,将输出3, 4, 5, 6, 0, 0System.out.println(b数组的元素为: + Arrays.toString(b);/将b数组的第3个元素(包括)到第5个元素(不包括)赋为1Arrays.fill(b , 2, 4 , 1); /fill方法可一次对多个数组元素进行批量赋值/输出b数组的元素,将输出3, 4, 1, 1, 0, 0System.out.println(b数组的元素为: + Arrays.toString(b);/对b数组进行排序Arrays.sort(b);/输出b数组的元素,将输出0, 0, 1

17、, 1, 3, 4System.out.println(b数组的元素为: + Arrays.toString(b);程序运行结果:a数组和a2数组是否相等:truea数组和b数组是否相等:falseb数组的元素为:3, 4, 5, 6, 0, 0b数组的元素为:3, 4, 1, 1, 0, 0b数组的元素为:0, 0, 1, 1, 3, 4第四章数组与字符串不规则数组 -Java语法支持方便地构造一个“不规则”数组,即数组的每一行有不同的长度。 n【示例4-4】TwoArrayAgain.javanpublic class TwoArrayAgainnpublic static void ma

18、in(String args)nint twoArray = new int4; /声明二维数组ntwoArray0 = new int1;/ 定义每一行ntwoArray1 = new int2;ntwoArray2 = new int3;ntwoArray3 = new int4; nint i, j, k = 0;nfor(i=0; itwoArray.length; i+)nfor(j=0;jtwoArrayi.length ;j+,k+)ntwoArray ij = k;nnfor(i=0; itwoArray.length; i+)n for(j=0;jtwoArrayi.leng

19、th;j+)n n System.out.print(twoArrayij + );nnSystem.out.println();nnn程序运行结果:0 1 2 3 4 5 6 7 8 9第四章数组与字符串字符串操作类njava.lang.String类字符串/字符序列n构造方法npublic StringString() npublic StringString(byte bytes ) npublic StringString(byte bytes, int offset, int count)npublic StringString(char value ) npublic String

20、String(char value , int offset, int count)npublic StringString(String original) 第四章数组与字符串4.2.1 String类 n当创建一个String对象时,被创建的字符串是不能被改变的。每次需要改变字符串时都要创建一个新的String对象来保存新的内容。原始的字符串不变。 n一个字符串对象一旦被配置,它的内容就是固定不可变的 .例如:String str = hello,Java; 第四章数组与字符串4.2.1 String类 nString str = Hello;str = Java;。 在Java 中,使用

21、“=”将一个字符串对象指定给一个变量名称,其意义为改变该名称所引用的对象,原来被引用的字符串对象若没有其他名称来引用它,就会在适当的时候被Java 的“垃圾回收”(Garbage Collection)机制回收。在Java 执行时会维护一个String 池(Pool)。对于一些可以共享的字符串对象,会先在String 池中查找是否存在相同的String 内容(字符相同),如果有就直接返回,而不是直接创造一个新的String 对象,以减少内存的耗用。如果在程序中使用下面的方式来声明,则实际上是指向同一个字符串对象:String str1 = ByTheWay;String str2 = ByTh

22、eWay;System.out.println(str1 = str2);如果要比较两个字符串对象的字符值是否相同,要使用equals()方法,以下的写法才会显示true 的结果:String str1 = new String(caterpillar);String str2 = new String(caterpillar);System.out.println(str1.equals(str2); 第四章数组与字符串1. String对象的创建对象的创建n(1)String(), 默认构造方法,无参数n String s1 = new String(); n(2)String( char

23、 chars) ,传入字符数组n char myChars=a, b, c;n String s2 = new String(myChars) / 使用字符串“abc”初始化s2n(3)String( char chars, int startIndex, int numChars) ,传入一个字符数组,从指定下标位置开始获取指定个数的字符,用这些字符来初始化字符串变量。n char myChars=h, e, l, l, o;n String s3 = new String(myChars,1,3); /使用字符串“ell”初始化s3n(4)String(String strObj),传入另

24、一个字符串对象,用该字符串对象的内容初始化n String s4= new String(s3); / 这是s4也是“ell”了。n(5)String(byte asciiChars)n String(byte asciiChars, int startIndex, int numChars) n尽管Java的char类型使用16位(bit)表示Unicode编码字符集,在Internet中,字符串的典型格式使用由ASCII字符集构成的8位数组,因为8位ASCII字符串是共同的,当给定一个字节(byte)数组时,String类提供了上面两个初始化字符串的构造函数。; 第四章数组与字符串【示例4

25、-6】:SubStringConv.javapublic class SubStringConv public static void main(String args) byte ascii=65,66,67,68,69,70; String s1=new String(ascii); System.out.println(s1); String s2=new String(ascii,2,3); System.out.println(s2);程序运行结果: ABCDEFCDE 第四章数组与字符串2. String对象的连接对象的连接n与大多数程序语言一样,Java允许使用符号 + 把两个字

26、符串连接(concatenate)在一起。String word1 =Expletive;String word2= deleted;String Message = word1 + word2;上面的代码给字符串变量Message赋值为”Expletivedeleted”,。n当连接一个字符串和一个非字符串时,后者将被转换成字符串。例如:int age =13;String rating = PG+age;将把rating的值赋为字符串“PG13”。这种特性常被用在输出语句中,例如:System.out.println(The answer is+answer);第四章数组与字符串3. St

27、ring对象的编辑对象的编辑n字符串在Java 中以String 类的一个实例存在,所以每个字符串对象本身会拥有几个可操作的方法。n常用的方法下表所示。方 法说 明length()取得字符串的字符长度equals()判断原字符串中的字符是否等于指定字符串中的字符toLowerCase()转换字符串中的英文字符为小写toUpperCase()转换字符串中的英文字符为大写第四章数组与字符串【示例4-7】: StringDemo.javapublic class StringDemo public static void main(String args) String text = hello;S

28、ystem.out.println(字符串内容: + text);System.out.println(字符串长度: + text.length();System.out.println(等于hello? +text.equals(hello);System.out.println(转为大写: +text.toUpperCase();System.out.println(转为小写: +text.toLowerCase();程序运行结果:字符串内容: hello字符串长度: 5等于hello? true转为大写: HELLO转为小写: hello第四章数组与字符串4. String对象的访问对象

29、的访问方 法说 明char charAt(int index)返回指定索引处的字符int indexOf(int ch)返回指定字符第一个找到的索引位置int indexOf(String str)返回指定字符串第一个找到的索引位置int lastIndexOf(int ch)返回指定字符最后一个找到的索引位置String substring(int beginIndex)取出指定索引处至字符串尾端的子字符串String substring(int beginIndex, int endIndex)取出指定索引范围子字符串char toCharArray()将字符串转换为字符数组第四章数组与字

30、符串【示例4-7】: StringDemo.java【示例4-8】CharAtString.javapublic class CharAtString public static void main(String args) String text = Ones left brain has nothing right.n+ Ones right brain has nothing left.n;System.out.println(字符串内容: );for(int i = 0; i text.length(); i+)System.out.print(text.charAt(i);Syste

31、m.out.println(n 第一个left: +text.indexOf(left);System.out.println(最后一个left: +text.lastIndexOf(left);char charArr = text.toCharArray();System.out.println(n 字符Array 内容: );for(int i = 0; i charArr.length; i+)System.out.print(charArri);程序运行结果:字符串内容: Ones left brain has nothing right.Ones right brain has n

32、othing left.第一个left: 6最后一个left: 66 字符Array 内容: Ones left brain has nothing right.Ones right brain has nothing left. 第四章数组与字符串5. 判断判断String对象是否相等对象是否相等 n1)equals方法:要测试两个字符串是否相等,可以使用equals方法。如果字符串p和t相等,那么表达式:p.equals(t) 的返回值为true,否则返回值为false。注意p和t可以是字符串变量,也可以是字符串常量。例如:表达式“Hello”.equals(t)就是合法的。 要判断两个字

33、符串除了大小写区别之外是否相等,可以使用equalsIgnoreCase方法。如:“Hello”. equalsIgnoreCase(“hello”)的返回值为true。n2)=“=”用来判断两个引用变量是否指向同一位置。不要使用“=”操作符来判断两个字符串是否相等,它只能判断两个串是否指向同一个引用。 第四章数组与字符串【例例4-9】EqualsDemo.javapublic class EqualsDemo public static void main(String args)String s1=aaaa; String s2=new String(aaaa); String s3=aa

34、aa; String s4=new String(aaaa); System.out.println(s1=s3); /字符串常量引用同一常量池中的对象 System.out.println(s2=s4); /字符串对象将分别创建 System.out.println(s1.equals(s2); System.out.println(s3.equals(s4); 程序运行结果:truefalsetruetrue第四章数组与字符串4.2.2 StringBuffer类类 nStringBuffer 类(字符串缓冲器类),表示了可变长度的可写的字符序列。与String类不同,StringBuff

35、er类是一个在操作中可以更改其内容的字符串类,即一旦创建了StringBuffer类的对象,那么在操作中便可以更改和变动字符串的内容。也就是说,对于StringBuffer类对象,不仅能够进行查找和比较等操作,还可以进行添加、插入、修改之类的操作。n 每个StringBuffer对象都有一个容量,只要其字符序列的长度不超过其容量,就无需分配新的内部缓冲数组,如果内部缓冲数组溢出,StringBuffer对象的容量将自动增大。 第四章数组与字符串4.2.2 StringBuffer类类 nStringBuffer 类(字符串缓冲器类),表示了可变长度的可写的字符序列。与String类不同,Str

36、ingBuffer类是一个在操作中可以更改其内容的字符串类,即一旦创建了StringBuffer类的对象,那么在操作中便可以更改和变动字符串的内容。也就是说,对于StringBuffer类对象,不仅能够进行查找和比较等操作,还可以进行添加、插入、修改之类的操作。n 每个StringBuffer对象都有一个容量,只要其字符序列的长度不超过其容量,就无需分配新的内部缓冲数组,如果内部缓冲数组溢出,StringBuffer对象的容量将自动增大。 第四章数组与字符串4.2.2 StringBuffer类类 1. 构造方法构造方法 (1)public stringBuffer() :默认构造方法。 (2

37、)public StringBuffer(int length) :按照length作为初始容量初始化StringBuffer对象 (3)Public StringBuffer(String Str) : 按照String对象str为StringBuffer对象中的初始字符串。 第四章数组与字符串4.2.2 StringBuffer类类 2. 主要成员方法主要成员方法 (1)Public int length() : 得到当前StringBuffer的长度(字符数)。 (2)public int capacity() : 得到当前StringBuffer的容量。 (3)public Synch

38、ronized void ensureCapacity(int minimumCapacity): 确保StringBuffe的容量不小于minimumCapacity。 (4)public synchronized void setLength(int newLength) : 设置StringBuffer的长度为newLength。 (5)public synchronized char charAt(int index) : 得到指定位置index的字符。 (6)public synchronized void getChars(int srcBegin,int srcEnd,char

39、dst,int dstBegin) : 将StringBuffer中从srcBegin到srecEnd的字符拷贝到数组dst(开始位置为dstBegin)中。第四章数组与字符串【示例示例4-10】StringBufferDemo.javanpublic class StringBufferDemo nStringBuffer sb1 = new StringBuffer(Hello world!);nStringBuffer sb2 ;nStringBuffer sb3 = new StringBuffer(10);npublic StringBufferDemo()n sb2 = new S

40、tringBuffer(This is Java code.);n sb3 = new StringBuffer(Hello Java code);n String output = sb1: + sb1.toString()+nlength=+sb1.length()+ncapacity=+sb1.capacity();n sb1.replace(4, 6, ,);/将起始位置4和结束位置6中间的内容替换成“,”(包含4不包含6)n sb1.setLength(30);/设置sb1的长度30n System.out.println(After add sb1s length,);/输出sb1的长度12n System.out.println(sb1s capacity is: + sb1.length();/sb1的容积范围是30n sb1.ensureCapacity(60);n /使用StringBuffer类的方法ensureCapacity(),来设置可变字符串的最大存储容量n System.out.println(Set sb1s capaci

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论