第4章 字符串.ppt
第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类的一些常用方法。 1String类初始化 String类可用字符串常量对其初始化,也可调用其构造方法来进行。例如: String s=“Welcome to Java Wrold! “; String类主要构造方法见表4.1。,表4.1 String类的构造方法,例如: 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类的常用方法列表,例如: 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类方法很多,下面我们也从初始化与访问方法两个方面加以介绍。 1String Buffer类的初始化 String Buffer类只能用初始化函数对其初始化,如果想按下面语句: String Buffer s= “Welcome to Java! “; 对其初始化,则系统会给出出错信息。 String Buffer的构造函数如表4.3所示。,表4.3 String Buffer类的构造函数,2String Buffer类的访问方法 String Buffer类的方法主要就是添加字符和插入字符,如表4.4所示。,表4.4 String Buffer类的主要方法,例如: string Buffer sb=new String Buffer(“this is a test String Buffer“); sb.setLength(14); / sb=“this a test“ sb.set Char(0,' T '); /sb=“This is a test“ sb.append(5.12); / append a double number sb.append(true); /append a Boolean number, then sb=“This is a test5.12true“ sb.insert(14, “value=“); /sb=“This is a test value=5.12true“,4.2.2 String Buffer类的使用实例 下面给出一个字符串的反转操作实例。 例4.2 public class Reverse String public Reverse String() public static void main(String args) String message1 = Dialog Box.request,(“Supply a String to be reversed: “); ReverseString r=new ReverseString(); Transcript.print(r.reverse(message1); public String reverse(String s) int len=s.length(); StringBuffer sb=new StringBuffer();,for(int i=(len-1);i=0; i-) sb.append(s.charAt(i); return sb.toString(); ,当运行程序的时候,会出现一个对话框,要求输入一个字符串。如输入:“Welcome to Java World!“(如图4.5所示),则反转的结果如图4.6所示。,图 4.5,图 4.6,4.3 字符串的特殊处理方法,我们知道,基于网络的应用常常会碰到诸如对一个字符串进行解析,将其分解为多个子串的问题。如Web页面表格设计中,浏览器可能以字符串的形式返回多个表格值。例如: String s=“name=Boy,如果调用String、String Buffer类中方法,当然也可以实现字符串的解析,但较为繁琐。为此,Java类java.util提供了String Tokenizer对字符串进行解析,我们将给出两个实现同一目的的例子加以说明。 例4.3 import java.util.*; public class String Parse public String Parse() , public static void main(String args) String s=“name=Boy ,在该程序中,对String Tokenizer对象进行初始化的同时,我们还对它进行了分隔符的设置(本例中,我们设置为字符“&”与“=”)。方法has More Tokens()用于判断解析是否完毕;next Token()得到下一个记号。本例的运行结果如图4.7所示。 下面是一个用String、String Buffer的类方法实现字符串解析的例子。,图 4.7,例4.4 public class StringParse1 public StringParse1() public static void main(String args) String parsestr=new String3; String parsename=new String3; String parsevalue=new String3;,String s=“name=Boyi+) ,j=parsestri.indexOf('='); parsenamei=parsestri.substring(0,j); j+; parsevaluei=parsestri.substring(j); for(i=0;icount;i+) Transcript.println(parsenamei+“=“+parsevaluei); ,图 4.8,