资源描述
,第二级,第三级,第四级,第五级,第4章 字符串,第4章 字符串,4.1,String,类的特点,4.2,String Buffer,类的特点,4.3 字符串的特殊处理方法,4.1,String,类的特点,String,类是字符串常量类,该类对象在建立后不能修改。,Java,编译器保证每个字符串常量都是,String,类对象。用双引号括住的一串字符即为字符串常量,比如“,Welcome to Java!,在通过编译器编译后成为,String,对象。因而,实例化一个,String,类对象既可以通过字符串常量,也可以通过系统提供的构造方法。,4.1.1,String,类的基本方法,前面谈到过,String,类的一些基本属性,本节我们讨论,String,类的一些常用方法。,1,String,类初始化,String,类可用字符串常量对其初始化,也可调用其构造方法来进行。例如:,String s=Welcome to Java,Wrold,!;,String,类主要构造方法见表4.1。,表4.1,String,类的构造方法,方 法,功能描述,String(),生成一个空串,String(String value),用已知串生成一个串对象,String(char value),用字符数组生成一个串对象,String(char value,int,offset,int,count),用字符数组,value,的,offset,位置开始的,count,个字符,建立一个字符串对象,之后并不影响原来的字符数组,String(char value,int hibyte,int,offset,int,count),基本功能同上,例如:,char char1=a,b,c,d;,String s1=new String();,String s2=new String(char1);,String s3=new String(char1,1,2);,/,生成字符串“,bc,”,String s4=new String(char1,0,1,3);,/,生成字符串“,bcd,”,2字符串类的,String,访问,字符串的访问即字符串的引用,它包括得到字符串的长度,得到指定位置的字符或子串,以及得到某个字符或子串在字符串中的索引位置等。,String,类的功能很强,几乎覆盖了所有的字符串运算操作。表4.2给出了一些常用的字符串运算方法。,表4.2,String,类的常用方法列表,方 法,功能描述,length(),返回字符串的长度,toLowerCase,(),转换为小写串,toUpperCase,(),转换为大写串,charAt,(,int,index),返回字符串的第,index,个字符,substring,(,int beginindex,),返回从,beginindex,位置(包括该位置)开始到结尾的所有字符,substring,(,int beginindex,int endindex,),返回从,beginindex,位置(包括)开始到,endindex,(,不包括)的所有字符,compareTo,(String,anotherString,),字符串比较,返回值为二者差,regionMatches,(,int toffset,String other,int ooffset,int len,),比较本串从,toffset,开始的,len,个字符和,other,串从,ooffset,开始的,len,个字符是否一致,startWith,(String prefix),比较字符串是否以,prefix,开始,endWith,(String suffix),比较字符串是否以,suffix,结束,indexOf,(,int ch,),返回某个字符或字符串在本字符串中第一次出现的位置,lastIndexOf,(),返回某个字符或字符串在本字符串中最后一次出现的位置,replace(char,oldChar,char,newChar,),将字符串中,oldChar,字符替换成,newChar,字符,valueOf,(Object,obj,),将某个对象的实例转换成字符串,例如:,String s=,abCD,;,int,i=s.length();/i=4,String s1=s.,toLowerCase,();/s1=,abcd,String s2=s.,toUpperCase,();/s2=ABCD,char c=s.,charAt,(3);/c=D,String s3=s.,substirng,(2);/s3=CD,String s4=s.,substirng,(2,3);/s4=C,boolean,b=s.,regionMatches,(1,bCE,0,2);/b=false,boolean,b1=s.,startWith,(,ab,);/b1=true,boolean,b2=s.,endWith,(de);/b2=false,int,m=s.,indexOf,(C);/m=2,int,k=s.,lastIndexOf,(C);/k=2,String s5=s.replace(b,B);/s5=,aBCD,double d=5.234;,String s6=String.,valueOf,(d);/s6=5.234,4.1.2,String,类的使用实例,在上一节中我们给出了,String,类的一些方法,可以看出,,String,类几乎覆盖了字符串的所有操作,给实际的编程带来了极大的方便。下面我们给出一个,String,类的使用实例。,例4.1,import java.,awt,.*;,public class Messages,/*,Allows messages to be sent to the class,SquareFigure,via a dialog box.,*/,public static void main(String ,args,),SquareFigure,.create();,while(true),try,String message1=,DialogBox,.request,(Supply message to be sent:,SquareFigure,.);,String message=message1.trim();,int startArg,=message.,indexOf,();,int endArg,=message.,indexOf,();,int commaPosn,;,String,argRaw,;,String,arg,;,String arg1Raw;,String arg1;,String arg2Raw;,String arg2;,String name1=message.,substring,(0,startArg,);,/,取出类中的方法,String name=name1.trim();,if(,endArg,-,startArg,1),argRaw,=message.,substring,(,startArg,+1,endArg,);,/,得到方法的调用参数,arg,=,argRaw,.trim();,else,arg,=;,if(,endArg,!=message.length()-1),DialogBox,.warn(Message not understood:try again!);,elseif,(name.equals(,SquareFigure,.,moveRight,),SquareFigure,.,moveRight,(Integer.,parseInt,(,arg,);,else if(name.equals(,SquareFigure,.,moveLeft,),SquareFigure,.,moveLeft,(Integer.,parseInt,(,arg,);,elseif,(name.equals(,SquareFigure,.,moveUp,),SquareFigure,.,moveUp,(Integer.,parseInt,(,arg,);,elseif,(name.equals(,SquareFigure,.,moveDown,),SquareFigure,.,moveDown,(Integer.,parseInt,(,arg,);,elseif,(name.equals(,SquareFigure,.,setColour,)if(,arg,.equals(Color.red),SquareFigure,.,setColour,(Color.red);,else if(,arg,.equals(Color.blue),SquareFigure,.,setColour,(Color.blue);,else if(,arg,.equals(Color.green),SquareFigure,.,setColour,(Color.green);,else,DialogBox,.warn(Invalid,colour,:try again);,else,DialogBox,.warn(Message not understood:try again!);,catch(Exception e),DialogBox,.warn(Message not understood:try again!);,在该例中,,SquareFigure,、,DialogBox,同样是我们提供的标准类,读者可从附录中查阅。,本程序首先生成一个红色的正方形(如图4.1所示),该正方形显示在窗口的正中间,同时会出现一个如图4.2所示的提示框。在该提示框中输入类,SquareFigure,中的方法,就可以达到移动、改变颜色的目的。如在提示框中分别输入,moveUp,(30)、,setColour,(Color.blue),后结果如图4.3、4.4所示。在程序中,我们用到了,String,类的一些方法,读者可自行分析。,图 4.1,图 4.2,图 4.3,图 4.4,4.2,String Buffer,类的特点,String,类是字符串常量类,初始化后就不能进行修改,而,String Buffer,类是字符串缓冲区,不仅可以接受修改,还可以读入整个文件。在,Java,中,,String Buffer,类是一个可以修改的字符串对象,使用起来比,String,类更加灵活、方便。,Java,中并不支持运算符的重载,但“+”是个例外,例如,对语句:,String s=Welcome+to+Java!;,编译器首先生成类,StringBuffer,的一个实例,然后连续调用方法,append(),,最后,再调用方法,toString,(),把,StringBuffer,对象转换为,String,对象。这相当于执行语句:,String,s=new,String Buffer(Welcome).append(to).append(Java!).,toString,();,4.2.1,String Buffer,类的基本方法,与,String,类类似,,String Buffer,类方法很多,下面我们也从初始化与访问方法两个方面加以介绍。,1,String Buffer,类的初始化,String Buffer,类只能用初始化函数对其初始化,如果想按下面语句:,String Buffer s=Welcome to Java!;,对其初始化,则系统会给出出错信息。,String Buffer,的构造函数如表4.3所示。,表4.3,String Buffer,类的构造函数,函 数,功能描述,StringBuffer,(),建立空的字符串对象,StringBuffer,(,int,length),建立长度为,length,的字符串对象,StringBuffer,(String),建立一个初始值为,Strin
展开阅读全文