JAVA-数组与字符串.ppt_第1页
JAVA-数组与字符串.ppt_第2页
JAVA-数组与字符串.ppt_第3页
JAVA-数组与字符串.ppt_第4页
JAVA-数组与字符串.ppt_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

1、1,2020年7月12日星期日,第5章,数组与字符串,2,2020年7月12日星期日,在程序设计中,数组类型是一种表示数据集合的常用手段,字符串是一种表示姓名、提示信息等类似数据的常见形式。 在Java语言中,为数组类型与字符串都定义了相应的标准类,Arrays是实现数组类型的组织与操作的类,String是实现字符串存储与操作的类。 这样既体现了Java面向对象的完整性,又增强了这两种数据的操作能力,为简化程序设计过程,提高程序的可靠性提供了可能性。,3,2020年7月12日星期日,5.1 数组类型,根据数据类型的构成方式不同,可以将所有的数据类型分成两个类别: 简单数据类型 复合数据类型。

2、所谓简单是指用于组织单值数据的数据类型;所谓复合是指组织数据集合的数据类型. 由惟一确定某个数组元素所需要的下标个数可以将数组分为: 一维数组 二维数组 多维数组。,4,2020年7月12日星期日,5.1.1 一维数组,所谓一维数组是指每个元素由一个下标值惟一确定的数组类型。这是一种使用十分频繁的数据类型. 它的特征明显、操作方便、易于理解,是每个程序设计者在编写程序的过程中无法回避使用的一种数据类型。,5,2020年7月12日星期日,1. 一维数组的定义,定义数组型变量的语法格式为: 数组元素类型 数组型变量名; 或者 数组元素类型 数组型变量名 ; “数组元素类型”为组成一维数组的元素类型

3、 “数组型变量名”为定义的数组型变量名称,它应该符合Java语言的标识符命名规则,建议遵守Java语言的标识符命名规范。,6,2020年7月12日星期日,例: int intArray; 或者 int intArray ; float floatArray; 或者 float floatArray ; String stringArray; 或者 String stringArray ; 建议使用前一种格式风格,这种格式风格的好处是将数据类型集中表示,即前面是数据类型,后面是变量名称,而后面一种格式风格的数据类型被变量名称分隔为前后两个部分。 Java语言保留这种定义格式风格完全是为了尊重人们

4、的使用习惯。,7,2020年7月12日星期日,2. 一维数组的创建,一个数组可以包含多个元素,所含的元素数目被称为数组的长度,数组中也可以没有任何元素,此时称为空数组。正因为如此,在创建数组时需要给出组成数组的元素数目。下面是利用new运算符创建数组的语法格式: new 数组元素类型数组元素数目; “数组元素类型”为组成数组的元素类型,“数组元素数目”为组成数组的元素数目,这个值要求大于或等于零。,8,2020年7月12日星期日,例: intArray由100个int类型的元素组成 intArray = new int100; floatArray由50个float类型的元素组成floatAr

5、ray = new float50; stringArray由10个String类型的元素组成 stringArray = new String10;,9,2020年7月12日星期日,也可以将数组的定义与创建合并 char name = new char30; double doubleData = new double10;,name,doubleData,10,2020年7月12日星期日,3. 一维数组的初始化,在创建数组的同时,为数组元素赋予初始值的过程被称为数组的初始化。 int intArray = 10,20,30,40,50,60,70,80,90,100; 操作过程 首先为in

6、tArray数组分配10个int型元素所需要占用的存储空间,然后将初始值10,20,30,40,50,60,70,80,90,100依次赋给intArray0intArray9。,11,2020年7月12日星期日,3. 一维数组的初始化,String name = zhang, wang, li, zhao; 由于在Java语言中字符串属于String类对象,所以这条语句的操作过程会稍复杂一些。首先,要为4个String型引用分配存储空间,然后再根据4个初始值为4个字符串分配存储空间,最后将初始值zhang,wang,li,zhao 的引用依次赋给name0name3。,12,2020年7月1

7、2日星期日,4. 一维数组元素的访问,创建数组后,就可以通过引用访问数组元素以达到对数组操作的目的。 Java访问数组元素的格式为: arrayName下标表达式 在运行程序时,Java语言会严格地检查每个“下标表达式”的取值范围,一旦发生越界就会抛出ArrayIndexOutOfBoundsException异常。,13,2020年7月12日星期日,length的使用: 当需要对数组中的每个元素进行操作时,可以利用数组对象中封装的length属性获得当前数组中包含的元素数目。 板式: 数组名.length int value = 10,9,40,20,12,8,9; for (int i =

8、 0, sum = 0; i value.length; i+) sum += valuei; 在for语句中,将循环上界设定为value.length的好处是:当value数组的长度发生变化时不需要修改程序的其他地方。,14,2020年7月12日星期日,在JDK 5.0版本中增加了一个专门用于操作数据集合的循环流程控制语句for each,其功能更加强大、书写更加简洁。这种语句的书写格式为: for (数组元素型变量 :数组型变量) 语句; “数组元素型变量”是与数组元素同类型的变量, “数组型变量”是一个表示数组引用的变量。 例如,可以将上述数组元素累加的程序段改写成: int sum =

9、 0; int value = 10,9,40,20,12,8,9; for (int v : value) sum += v; 这条语句的执行过程可以描述为:循环访问value数组中的每个元素并将其内容累加到变量sum中。,必须在此定义v,15,2020年7月12日星期日,5. 一维数组的复制,在Java语言中,数组型变量可以实现两种形式的复制操作。 第一种复制操作被称为数组引用的复制 int firstArray = 10,20,30,40,50,60; int secondArray; secondArray = firstArray; 这条赋值语句的执行效果是将firstArray的引

10、用信息赋给secondArray,此时firstArray与secondArray共同引用一个数组。,16,2020年7月12日星期日,第二种复制是使用arraycopy arraycopy是System类中的一个静态方法。 定义格式为: void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 其中,src为被拷贝的原始数组,srcPos为原始数组中将要拷贝的数组元素的起始位置,dest为目标数组,destPos为拷贝到目标数组中后放置数组元素的起始位置,length为拷贝的数组元素数目。,17,

11、2020年7月12日星期日,int arraySrc = 5,10,15,20,25,30,35,40,45,50; int arrayDest = new int10; 执行语句: System.arraycopy(arraySrc, 0, arrayDest, 0, 10) ;,18,2020年7月12日星期日,举例5-1: 假设有n个候选人参加学生会主席的竞选,最后将根据学生的投票情况决定学生会主席的获胜人选。编写一个程序,完成选票的统计工作,并显示最终的获胜者。 分析:为了利用程序解决这个问题,假设为每位候选人编号1. n。如果希望为某位候选人投票时,只需要从键盘上输入这位候选人的编号

12、即可。 每位候选人所获的选票的存储在一个含有n个元素的一维数组中。由于含有n个元素的一维数组的下标范围在0.n-1之间,所以,在程序实现中,需要将候选人的编号与数组元素的下标做一个映射,即1号候选人在数组中用下标0表示,2号候选人在数组中用下标1表示,依此类推,n号候选人在数组中用下标n-1表示。,19,2020年7月12日星期日,在Java语言中,一维数组的元素可以属于任意类型,包括基本数据类型和引用数据类型。也就是说,一维数组的元素又可以是一维数组类型,这就支持了二维数组,乃至多维数组的概念。由于可以借助于二维数组表示具有二维关系的数据,所以它的应用十分广泛。,5.1.2 二维数组,20,

13、2020年7月12日星期日,1. 二维数组的定义与创建,Java语言规定,二维数组的定义格式为: 数组元素类型 数组型变量名; 或者 数组元素类型 数组型变量名 ; 或者 数组元素类型 数组型变量名 ; “数组元素类型”为二维数组的元素类型, “数组型变量名”为二维数组型变量名称。,21,2020年7月12日星期日,例: int intArray; float floatArray ; double doubleArray ; 在这3种定义格式中,建议使用第一种格式。 第二种格式完全是为了尊重那些习惯使用C/C+定义格式的人们而保留的 第三种格式清晰度较差,不提倡使用。,22,2020年7月1

14、2日星期日,创建二维数组的格式为: new 数组元素类型行数列数; 其中,“数组元素类型”为二维数组元素的类型, “行数”与“列数”表明了陈列在行方向与列方向的元素数量。 例如: intArray = new int105; floatArray = new float34; 二维数组中length的使用 二维数组名.length /返回含有的一维数组的个数 二维数组名行下标.length /返回行中列数. 例: floatArray.length 的结果是3 floatArray.1.length的结果是4,23,2020年7月12日星期日,int intArray = new int105

15、; 等价于: intArray = new int10; for (int i = 0; i 10; i+) intArrayi = new int5; ,24,2020年7月12日星期日,每行元素个数不同,floatArray = new float5 ; for (int i = 0; i 5; i+) floatArrayi = new floati+1; ,25,2020年7月12日星期日,2. 二维数组的初始化,int intArray=1,2,3,4, 5,6,7,8, 9, 10, 11,12; 执行效果:首先创建二维数组,然后,将第1个括号中的3个数值分别赋给第1行的3个元素;

16、再将第2个括号中的3个数值分别赋给第2行的3个元素;最后将第3个括号中的3个数值分别赋给第3行的3个元素。初始化后的数组元素状态为:,26,2020年7月12日星期日,3. 二维数组元素的访问,创建二维数组之后,可以通过引用型的二维数组变量对数组元素进行操作了。二维数组必须用两个下标惟一地确定元素,第一个下标为行下标,第二个下标为列下标,下标的起始编号从0开始。 int intArray = new int54;,27,2020年7月12日星期日,举例:利用二维数组表示矩阵,并实现两个矩阵相乘的操作。 矩阵可以用来表示统计数据等方面的各种有关联的数据。在数学上,矩阵可以是由方程组的系数及常数构

17、成的方阵。下面给出一个方程组与之对应的矩阵表示。,28,2020年7月12日星期日,在矩阵的运算中,要求两个相乘的矩阵必须满足第1个矩阵的列数等于第2个矩阵的行数。即对于 Am1n1和Bm2n2,要求n1=m2,且结果矩阵C的行列数为m1n2,其中的每个元素内容为,29,2020年7月12日星期日,public static void enterMatrix(int m, int row, int col) / 输入矩阵 for (int i = 0; i row; i+) for (int j = 0; j col; j+) mij = (int) Math.round(Math.rando

18、m() * 10); ,30,2020年7月12日星期日,public static void printMatrix(int m, int row, int col) / 显示矩阵 System.out.println(); for (int i = 0; i row; i+) for (int j = 0; j col; j+) System.out.printf(%4d,mij); System.out.println(); System.out.println(); ,31,2020年7月12日星期日,public static void MulMatrix(int a, int ro

19、w1, int col1, int b, int row2, int col2, int c) / 两个矩阵相乘 for (int i = 0; i row1; i+) for (int j = 0; j col2; j+) cij = 0; for (int k = 0; k col1; k+) cij += aik * bkj; ,32,2020年7月12日星期日,举例:编写一个Java程序,将NN的方阵转圈赋值,并显示输出。,33,2020年7月12日星期日,public static void rotating(int m, int num) / 向方阵中填写数值 int k = 1;

20、 / 将要填写的数值 for (int i = 0; i = i; j-) / 下方行方向 mnum - i - 1j = k+; for (int j = num - i - 2; j i; j-) / 左侧列方向 mji = k+; ,34,2020年7月12日星期日,5.2 字符串与String类,本节主要涉及在程序运行初始化后不能改变的字符串类String和字符串内容可以动态改变的类StringBuffer,以及用于进行字符串词法分析类StringTokenizer。同时还将介绍字符串和其它数据类型间的转换。 在C/C+中,字符串是以字符数组的方式来处理的,以字符0作为字符串结束的标志

21、,因此在进行字符串处理时比较容易发生错误。 Java则将字符串作为对象来处理,在对象中封装了一系列方法来进行字符串处理。利用Java字符串处理技术不仅可以减少程序设计的工作量,而且使程序编制更加规范,从而可以减少错误的发生。,35,2020年7月12日星期日,一、字符串的构造,36,2020年7月12日星期日,字符串的声明和其它类一样,如下格式 String s; 创建字符串可以使用String类的构造方法。 例如: s=new String(“We are students”); s= “We are students”; 声明和实例化对象也可一步完成: String s=new Strin

22、g(We are students); String s=We are students;,37,2020年7月12日星期日,例如: 1)在String类提供的构造方法中,可以由字符数组、字节数组以及字符串缓冲区来构成字符串,如下面的代码所示。 char cDem0l=2,3,4,5; char cDem02=1,2,3,4,5; String strDem01=new String(cDem0l); String strDem02=new String(cDem02,1,4); System.out.println(strDem01+ strDem01 ); 利用上面的两个构造方法生成的字符

23、串实例的内容均为“2345”。 2)下面例子说明如何利用字节数组生成字符串: byte cDem0l=66,67,68; byte cDem02=65,66,67,68; String strDem01=new String(cDem0l); String strDem02=new String(cDem02,1,3); 利用上面的两个构造方法生成的字符串实例的内容均为BCD。,38,2020年7月12日星期日,二、 String类的常用方法,String类提供了下列方法: length( )、charAt( )、indexOf( )、lastIndexOf( )、 getChars( )、g

24、etBytes( )、toCharArray( ) 在这些方法中,按用途来分,可以分为字符串长度计算、字符串比较、字符串检索、字符串的截取、替换等方法,下面我们将详细介绍这些方法。,39,2020年7月12日星期日,1、字符串长度计算 使用String 类中的length()方法可以获取一个字符串的长度。length()方法的定义如下: public int length() 该方法返回字符串中的 16-bit 的 Unicode 字符的数量。 例如: String s= we are students,tom= 我们是学生; int n1,n2,n3; n1=s.length(); / n1

25、 的值是15 n2=tom.length(); / n2的值5 n3=”我的爱好”.length(); /n3值是4,40,2020年7月12日星期日,2、字符串比较 字符串比较的方法有equals()、equalsIgnoreCase()、startsWith(),endsWith()、regionMatches()、compareTo(),compareToIgnoreCase()等方法 (1)、equals和equalsIgnoreCase方法 在String类中equals()定义如下: public boolean equals(String s) 该方法用来比较当前字符串对象的实体

26、是否与参数指定的字符串s的实体是否相同。例如 String tom=new String( we are students); String boy=new String( We are students); String jerry= new String(we are students); tom.equals(boy)的值是false,tom.equals(jerry)的值是true.,41,2020年7月12日星期日,在String类中equalsIgnoreCase ()定义如下: public boolean equalsIgnoreCase(String s) 字符串对象调用比较

27、当前字符串对象是否与参数指定的字符串s 相同,比较时忽略大小写。例如: String tom =new String(“ABC”), Jerry=new String(“abc”); tom.equalsIgnoreCase(Jerry)的值是true。 (2)、 startsWith、endsWith方法 字符串对象调用public boolean srartsWith(String s)方法,判断当前字符串对象的前缀是否是参数指定的字符串s,如 String tom= 220302620629021,jerry= 21079670924022; tom.startsWith(220)的值是

28、true; jerry.startsWith(220)的值是false。,42,2020年7月12日星期日,可以使用public boolean endsWith(String s) 方法,判断一个字符串的后缀是否是字符串s,如 String tom= 220302620629021, jerry= 21079670924022; tom.endsWith(021)的值是true jerry.endsWith(021)的值是false.,43,2020年7月12日星期日,【例】 通过学号判断某学生是否是2004级的男生。假设某学生学号为“200400581”,前4位为学号,最后1位为性别标志位

29、,0表示女生,1表示男生。程序如下: public class StringStart public static void main(String args) String john=200400581,start=2004; if(john.startsWith(start) 程序的运行结果如下: 该生是2004级男学生。,44,2020年7月12日星期日,(3)、 regionMatches方法 该方法的申明格式为: public boolean regionMatches(int firstStart,String other,int ortherStart,int length) 和

30、 public boolean regionMatches(boolean b,int firstStart,String other,int ortherStart,int length) 从当前字符串参数firstStart指定的位置开始处,取长度为length的一个子串,并将这个子串和参数other 指定的一个子串进行比较。其中other 指定的子串是从参数othertStart 指定的位置开始,从other中取长度为length的一个子串。如果两个子串相同该方法就返回true,否则返回false。注意,字符串的位置编号从0开始。,45,2020年7月12日星期日,(4)、 compar

31、eTo,compareToIgnoreCase方法 String类中中compareTo和compareToIgnoreCase方法申明的格式为: public int compareTo(String s) public int compareToIgnoreCase(String s) compareTo方法,按字典顺序与参数s 指定的字符串比较大小。如果当前字符串与s 相同,该方法返回值0 ,如果当前字符串对象大于s,该方法返回正值,如果小于s,该方法返回负值。例如 String str= abcde; pareTo(boy); /小于0 pareTo(“aba”); /大于0 pare

32、To(“abcde”); /等于0 按辞典序比较两个字符串还可以使用compareToIgnoreCase(String s)方法, 该方法忽略大小写,46,2020年7月12日星期日,【例】 将下面的字符串数组按字典序重新排列 public class SortStrs public static void main(String args) String a=Java,Basic,C+,Fortran,SmallTalk; for(int i=0;ia.length-1;i+) for(int j=i+1;ja.length;j+) if(pareTo(ai)0) String temp=

33、ai; ai=aj; aj=temp; for(int i=0;ia.length;i+) System.out.print( +ai); 程序的运行结果如下: Basic C+ Fortran Java SmallTalk,47,2020年7月12日星期日,class StringArray public static void main(String args) /定义字符串数组 String array = new StringThis is a test, Theo Washer, the case is closed, tHe aLtErNaTiNg StRiNg ; System.

34、out.println(排序之前:+n); /打印出排序之前的字符串数组 for (int i = 0; i array.length; i+) System.out.println(arrayi); System.out.println(排序之后:+n); /调用Arrays对象的方法对字符串数组进行排序 java.util.Arrays.sort(array, String.CASE_INSENSITIVE_ORDER); /打印出排序之后的字符串数组 for (int i = 0; i array.length; i+) System.out.println(arrayi); ,48,2

35、020年7月12日星期日,/MainA.java import java.util.*; class Main public static void main(String args) String strs = dog, pig, cat; Arrays.sort(strs); / “cat”, “dog”, “pig” System.out.println( Arrays.asList(strs) ); int ints = 9, 5, 1, 7; Arrays.sort(ints); for (int i=0; iints.length; i+) / 1 5 7 9 System.out

36、.print( intsi+ ); ,49,2020年7月12日星期日,/ SortDemo.java import java.util.*; public class SortDemo /实现Comparator接口的静态类 static class Comp implements Comparator public int compare( Object obj1, Object obj2) String s1=obj1.toString().toLowerCase(); String s2=obj2.toString().toLowerCase(); return pareTo(s2);

37、 ,50,2020年7月12日星期日,/程序的入口方法 public static void main( String args ) String strMonths= One,Two,three, Four,five,Six, Sevent,eight,Night, Ten,eleven,Twelve ; /利用Arrays类进行排序 Arrays.sort(strMonths); /get count of months int nMonthLen= strMonths.length; /按照字母顺序进行排序 for( int i=0; i nMonthLen; i+ ) System.o

38、ut.print(strMonthsi + ); System.out.println(); /用比较器进行构造 Arrays.sort(strMonths,new Comp(); for( int i=0; i nMonthLen; i+ ) System.out.print(strMonthsi + ); ,51,2020年7月12日星期日,3、字符串检索 搜索指定字符或字符串在字符串中出现的位置,用于字符或字符串在字符串中的定位。方法申明格式如下: public int indexOf(int ch) public int indexOf(int ch,int fromIndex) pu

39、blic int indexOf(String str) public int indexOf(String str,int fromIndex) 上述四个重载的方法分别用于在字符串中定位指定的字符和字符串,并且在方法中可以通过fromIndex来指定匹配的起始位置。如果没有检索到字符或字符串,该方法返回的值是-1。如下面代码所示。 String strSource=I love Java; int nPosition; nPosition=strSource.indexOf(v); / nPosition的值为:4 nPosition=strSource.indexOf(a,9); / nP

40、osition的值为:11 nPosition=strSource.indexOf(love); / nPosition的值为:2 nPosition=strSource.indexOf(love,0); / nPosition的值为:2,52,2020年7月12日星期日,另外,String类还提供字符串中的最后位置的定位,方法申明格式如下: public int lastIndexOf(int ch) public int lastIndexOf(int ch,int fromlndex) public int lastIndexOf(String str) public int lastI

41、ndexOf(String str,int fromIndex) 上述四个重载的方法分别用于在字符串中定位指定的字符和字符串最后出现的位置,并且在上述方法中可以通过fromIndex来指定匹配的起始位置。如果没有检索到字符或字符串,该方法返回的值是-1。,53,2020年7月12日星期日,4、字符串的截取 在字符串中截取子字符串,其申明格式如下: public String substring(int beginIndex) 该方法将获得一个当前字符串的子串,该子串是从当前字符串的beginIndex处截取到最后所得到的字符串。 public String substring(int begi

42、nIndex,int endIndex) 该方法将获得一个当前字符串的子串,该子串是从当前字符串的beginIndex处截取到endIndex-1结束所得到的字符串。 如下面的代码所示: String strSource=new String(Java is interesting); String strNewl=strSource.substring(5); / strNew1=”is interesting” String strNew2 =strSource.substring(5,6); / strNew2=”i”,54,2020年7月12日星期日,5、字符串的替换 在String类

43、中字符串替换的申明格式如下: public String replace(char oldChar,char newChar) 字符串对象s调用该方法可以获得一个串对象,这个串对象是用参数newChar 指定的字符替换s 中由oldChar 指定的所有字符而得到的字符串。 public String replaceAll(String old ,String new) 字符串对象s调用该方法可以获得一个串对象,这个串对象是通过用参数new指定的字符串替换s 中由old 指定的所有字符串而得到的字符串。 public String trim() 一个字符串s 通过调用方法trim()得到一个字符

44、串对象,该字符串对象是s去掉前后空格后的字符串。 如下面的代码所示: String s= I mist theep ; Strong temp=s.replace( t , s ); /结果是“I miss sheep String s= I am a student ; String temp=s.trim(); /结果是I am a student,55,2020年7月12日星期日,6.其他命令 (1) 字符串大小写转换,申明格式如下: public String toUpperCase(Locale locale) /仅对指定位置进行转换 public String toUpperCas

45、e() public String toLowerCase(Locale locale) /仅对指定位置进行转换 public String toLowerCase() (2) 转换为字符串数组,申明格式如下: public char toCharArray( ) (3) 字符串到字符数组之间的转换,申明格式如下: getChars(int srcBegin,int srcEnd,char dst,int dstBegin) (4) 连接两个字符串,申明格式如下: public String concat(String str) 该方法用于将两个字符串连接在一起,与字符串的“+”操作符功能相同

46、。,56,2020年7月12日星期日,【例】 String类简单方法的调用 public class AccesString public static void main(String args) int n1,n2,n3; String ko=Visual Baisc,La=java,s1,s2,s3,s4=C+; s1=ko.concat(La); s2 = s1.substring (7, 16); s3=ko.replace(s,x); n1=s1.length(); n2=s1.indexOf(La); n3=s1.lastIndexOf(Visual); System.out.p

47、rintln(s1); System.out.println(s2); System.out.println(s3); System.out.println(n1); System.out.println(n2); System.out.println(n3); ,运行结果如下: Visual Baiscjava Baiscjava Vixual Baixc 16 12,57,2020年7月12日星期日,三、StringBuffer类,一个String型变量一旦经过初始化,就不能被改变了。为什么它作为一个变量而又不能被改变呢?其实变量只是一个代表某个内存区域的引用符号,用来访问或修改它所指向的

48、内存空间。在String型变量的情况下,String型变量所指向的内存空间中的内容是不能被改变的,这是Java语言规范规定的。但是该变量可用于指向另外的内存空间。下列代码说明了这一点: String s=new String(Hello); s=“Hello World”; /现在s指向内存中的新位置 在实际应用中,经常会遇到对字符串内容进行动态修改。在这种情况下,String类在功能受到限制。Java提供了StringBuffer类来实现对字符串内容进行动态修改功能。根据StringBuffer类中提供成员方法分类,StringBuffer类主要用于完成字符串的动态添加、插入、替换等操作。,

49、58,2020年7月12日星期日,1、StringBuffer类的构造,StringBuffer类对象的申明和String类对象的申明再形式上是一样的 如:StringBuffer s; / 申明s为StringBuffer对象 s =new StringBuffer(Hello); / 实例化 s.setCharAt(1,o); /调用方法,将”Hello”变成“Hollo” StringBuffer类提供了三种构造方法,其格式如下: public StringBuffer() 构造一个不包含字符的字符串缓冲区,其初始的容量设为 16 个字符。 public StringBuffer(int

50、) 构造一个不包含字符的字符串缓冲区,其初始容量由参数设定。 public StringBuffer(String) 构造一个字符串缓冲区,来表示和字符串参数相同的字符序列。 字符串缓冲区的初始容量为16加上字符串参数的长度。,59,2020年7月12日星期日,2、StringBuffer类的常用方法,StringBuffer类主要用于完成字符串的动态添加、插入、替换等操作 1)添加操作append() 该功能主要由StringBuffer类中成员方法append完成,其作用就是将一个字符添加到另一个字符串缓冲区的后面。在应用中,如果添加字符的长度超过字符串缓冲区的的长度,则字符串缓冲区自动将

51、长度进行扩充。 下面为append方法的申明格式说明: public StringBuffer append(boolean b) public StringBuffer append(char c) public StringBuffer append(String str) 上面列举的构造方法,可用来向字符串缓冲区添加逻辑变量、字符、字符数组、双精度数、浮点数、整型数、长整型数、对象类型的字符串和字符串等。上述方法的返回类型均为StringBuffer。 例如: StringBuffer sbfSource=new StringBuffer(1+2=”); int nThree=3; sb

52、fSource.append(nThree); System.out.println(sbfSource.toString( ); 输出结果为: 1+2=3,60,2020年7月12日星期日,2)插入操作 下面为insert方法的申明: public StringBuffer insert(int offset,Boolean b) public synchronized StringBuffer insert(int offset,char str) public synchronized StringBuffer insert(int index,char sb, int offset,i

53、nt len) public synchronized StringBuffer insert(int offset,String str) 字符串缓冲区StringBuffer的插入操作主要用于动态地向StringBuffer中添加字符。根据构造方法中的参数类型,可以向字符串缓冲区插入逻辑变量、字符、字符数组、双精数、浮点数、整型数、长整型数、对象类型的字符串和字符串等。上述方法的返回类型为StringBuffer。 例如: StringBuffer sbfSource=new StringBuffer(1+=2); int nOne=1; sbfSource.insert(2,nOne);

54、 System.out.println(sbfSource.toString(); 输出结果为:1+1=2,61,2020年7月12日星期日,3)字符串缓冲区与字符串之间的转换 toString() 将字符串缓冲区转换为字符串,该方法返回类型为字符串。该方法是从缓冲区字符串向字符串转换的方法,十分重要。 4)取字符 (1) charAt(int index) 取得指定位置的字符。返回值类型为字符char。位置编号从0开始。 下面的代码段为charAt方法的例子: StringBuffer sbfSource=new StringBuffer(10); sbfSource.append(My);

55、 char c=sbfSource.charAt(0); / M (2) getChars(int srcBegin,int srcEnd,char dst,int dstBegin) 赋值指定位置的字符到字符串数组dst. 无返回值。 下面的代码段为getChars方法的例子: StringBuffer sbfSource=new StringBuffer(You are the best!); char str; sbfSource.getChars(0,2,str,0); / “Yo”,62,2020年7月12日星期日,5) 删除字符 (1)、delete(int start,int e

56、nd) 删除字符串缓冲区中起始序号为start、终止序号为end-1的字符,方法的返回类型为StringBuffer。 下面的代码段为delete方法的例子: StringBuffer sbfSource=new StringBuffer(You are the best); sbfSource.delete(0,3); / are the best! (2)、deleteCharAt(int index) 删除字符串缓冲区中指定位置的字符,方法的返回类型为StringBuffer。,63,2020年7月12日星期日,6)重设字符串长度 public void ensureCapacity(i

57、nt minimumCapacity) 该方法重新设置字符串缓冲区的长度。但必须保证缓冲区的容量至少等于指定的最小数。 如果字符串缓冲区的当前容量少于该参数,则分配一个新的更大的内部缓冲区。 新容量将取如下参数中较大的一个: 即: max参数 minimumCapacity , 旧容量的两倍加 2. 如果参数 minimumCapacity 非正,该方法不作任何操作,只简单地返回。 public void SetLength(int newLength) 该方法将重新设置字符串缓冲区的长度。设置该字符串缓冲区的长度时,如果参数 newLength 小于该字符串缓冲区的当前长度。 该字符串缓冲区

58、将被截断来包含恰好等于由参数 newLength 给出的字符数。,64,2020年7月12日星期日,7)内容替换 public StringBuffer replace(int start,int end,String str) 将字符串缓冲区中起始位置为start、终止位置为end的字符替换为由字符串str指定的内容,方法返回类型为StringBuffer。 下面的代码段为replace方法的例子: StringBuffer sbfSource=new StringBuffer(You are the best!); Stringstr=new String(Im); sbfSource.replace(0,7,str); / Im the best!,65,2020年7月12日星期日,8)取子串 (1) publuc String substring(int sta

温馨提示

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

最新文档

评论

0/150

提交评论