第7章字符串处理教学提示:Java语言是一种追求软件系统运行环境无关性的跨平台语言,为此Java平台将应用程序间、应用程序与磁盘文件之间的数据传输抽象为各种类型的流(Stream)对象,将文件系统中的文件抽象为File对象。教学要求:在本章中,阐述了Java语言中数据流的概念,对java.io包中的输入输出流类及其层次关系做了总体介绍,并详细介绍了各种常用的输入输出流类和文件操作类,要求掌握比较常用的输入输出流类,了解流类的继承关系。字符串是多个字符的序列,是编程中常用的数据类型。从某种程度上看,字符串有些类似于字符数组。实际上在C语言中,字符串就是用字符数组来实现的。但在纯面向对象的Java语言中,将字符串数据类型封装为字符串类,无论是字符串常量还是字符串变量,都是用类的对象来实现的。Java语言提供了两种具有不同操作方式的字符串类:String类和StringBuffer类。它们都是java.lang.Object的子类。用String类创建的对象在操作中不能变动和修改字符串的内容,因此也被称为字符串常量。而用StringBuffer类创建的对象在操作中可以更改字符串的内容,因此也被称为字符串变量。也就是说,对String类的对象只能进行查找和比较等操作,而对于StringBuffer类的对象可以进行添加、插入、修改之类的操作。7.1String类String类(字符串类)的对象是一经创建便不能变动内容的字符串常量。在Java语言中,字符串常量通常是作为String类的对象而存在,有专门的数据成员来表明它的长度。7.1.1创建String对象Java语言规定字符串常量必须用双引号括起,一个串可以包含字母、数字和各种特殊字符,如+、-、*、/、$等。例如:System.out.println(OK!);中的OK!就是字符串常量。Java的任何字符串常量都是String类的对象,只不过在没有用明确命名时,Java自动为其创建一个匿名String类的对象,所以,它们也被称为匿名String类的对象。我们可以用下面的方法创建String类的对象。例如:Stringc1=Java;上面的语句创建String类的对象c1,并通过赋值号将匿名String类的对象Java赋值给c1引用。String类的对象一经创建,便有一个专门的数据成员来记录它的长度。String类中提供了多种构造方法来创建String类的对象。见表7-1表7-1String类的构造方法构造方法说明String()创建一个空字符串对象String(Stringvalue)用串对象value创建一个新的字符串对象,value可以是字符串或String类的对象。String(charvalue[])用字符数组value[]来创建字符串对象。String(charvalue[],intoffset,int从字符数组value中下标为offset的字符开始,创建count)有count个字符的串对象。String(byteascii[])用byte型字符串数组ascii,按缺省的字符编码方案创建串对象。String(byteascii[],intoffsetintcount))从字节型数组ascii中下标为offset的字符开始,按缺省的字符编码方案创建count个字符的串对象。String(StringBufferBuffer)构造一个新的字符串,其值为字符串的当前内容。例7.1String类的7种构造方法的使用。importjava.io.*;publicclassExample7_1{publicstaticvoidmain(String[]args){charcharArray[]={'b','i','r','t','h','','d','a','y'};bytebyteArray[]={-61,-26,-49,-14,-74,-44,-49,-13};StringBufferbuffer;Strings,s1,s2,s3,s4,s5,s6,s7,s8;s=newString(hello);s8=ABC;buffer=newStringBuffer(Welcomtojavaprogramming!);s1=newString();s2=newString(s);s3=newString(charArray);s4=newString(charArray,6,3);s5=newString(byteArray);s6=newString(byteArray,2,4);s7=newString(buffer);System.out.println(s1=+s1);System.out.println(s2=+s2);System.out.println(s3=+s3);System.out.println(s4=+s4);System.out.println(s5=+s5);System.out.println(s6=+s6);System.out.println(s7=+s7);System.out.println(s8=+s8);System.out.println(buffer=+buffer);}}运行结果如下:s1=s2=hellos3=birthdays4=days5=面向对象s6=向对s7=Welcomtojavaprogramming!s8=ABCbuffer=Welcomtojavaprogramming!7.1.2String类的常用方法创建一个String类的对象后,使用相应类的成员方法对创建的对象进行处理,以完成编程所需要的功能。Java.lang.String常用成员方法如下表所示:表7-2Java.lang.String常用成员方法成员方法功能说明intlength()返回当前串对象的长度charcharAt(intindex)返回当前串对象下标intindex处的字符intindexof(intch)返回当前串内第一个与指定字符ch相同的下标,若找不到,则返回-1intindexOf(Stringstr,intfromIndex)从当前下标fromIndex处开始搜索,返回第一个与指定字符串str相同的第一个字母在当前串中的下标,若找不到,则返回-1Stringsubstring(intbeginIndex)返回当前串中从下标beginIndex开始到串尾的子串Stringsubstring(intbeginIndex,intendIndex)返回当前串中从下标beginIndex开始到下标endIndex-1的子串booleanequals(Objectobj)当且仅当obj不为null且当前串对象与obj有相同的字符串时,返回true否则返回flasebooleanequalsIgnoreCase(Strings)功能与quals类似,equalsIgnoreCase在比较字符串时忽略大小写intcompareTo(Stringanother_s)比较两字符串的大小。返回一个小于、等于或大于零的整数。返回的值取决于此字符串是不小于、等于或大于another_sStringconcat(Stringstr)将字符串str连接在当前串的尾部,返回新的字符串Stringreplace(charoldCh,charnewCh)将字符串的字符oldCh替换为字符串newChStringtoLowerCase()将字符串中的大写字符转换为小写字符StringtoUpperCase()将字符串中的小写字符转换为大写字符staticStringvalueOf(typevariable)返回变量variable值的字符串形式。Type可以是字符数组staticStringvalueOf(char[]data,intoffset,intcount)返回字符数组data从下标offset开始的count个字符的字符串staticStringvalueOf(Objectobj)返回对象obj的字符串StringtoString()返回当前字符串1.访问字符串对象用于访问字符串对象的信息常用到的成员方法有length()、charAt(intindex)、indexOf(intch)、substring(intbeginIndex,intendIndex)等,例7.2演示它们的使用方法和作用。例7.2访问字符串对象publicclassExample7_2{publicstaticvoidmain(Stringargs[]){Strings1=JavaApplication;intlen1=s1.length();intlen2=ABCD.length();charc1=12ABG.charAt(3);charc2=s1.charAt(3);intn1=abj.indexOf('a');intn2=s1.indexOf('J');intn3=abj.indexOf(bj,0);intn4=s1.indexOf(va,1);Strings2=abcdefg.substring(4);Strings3=s1.substring(3,9);System.out.println(s1是+s1+的长度为=+len1);System.out.println(ABCD的长度为=+len2);System.out.println(\12ABG\.charAt(3)=+c1+s1.chartAt(3)=+c2);System.out.println(\abj\.indexOf('a')=+n1+s1.indexOf('J')=+n2);System.out.println(\abj\.indexOf(\bj\,0)=+n3+s1.indexOf(\va\)=+n4);System.out.println(\abcdefg\.substring(4)=+s2);System.out.println(s1.substring(3,9)=+s3);}}运行结果:s1是JavaApplication的长度为=16ABCD的长度为=412ABG.charAt(3)=Bs1.chartAt(3)=aabj.indexOf('a')=0s1.indexOf('J')=0abj.indexOf(bj,0)=1s1.indexOf(va)=2abcdefg.substring(4)=efgs1.substring(3,9)=aAppl2.字符串比较常用的字符串比较成员方法有:equals()、equalsIgnoreCase()及compareTo()。例7.3字符串比较运算成员方法的使用publicclassExample7_3{publicstaticvoidmain(Stringargs[]){Strings1=Java;Strings2=java;Strings3=Java;booleanb1=s1.equals(s2);booleanb2=s1.equals(s3);booleanb3=(s1==s2);booleanb4=s1.equalsIgnoreCase(s2);intn1=s1.compareTo(s2);intn2=s2.compareTo(s1);intn3=s1.compareTo(s3);System.out.println(s1=+s1+\ts2=+s2+\ts3=+s3);System.out.println(s1.equals(s2)返回的值为:+b1);System.out.println(s1.equals(s3)返回的值为:+b2);System.out.println((s1==s3)返回的值为:+b3);System.out.println(s1.equalsIgnoreCase(s2)返回的值为:+b4);;System.out.println(s1.compareTo(s2)返回的值为:+n1);;System.out.println(