《第06章 字符串处理08342.ppt》由会员分享,可在线阅读,更多相关《第06章 字符串处理08342.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java程序设计程序设计之网络编程之网络编程电子邮件:电子邮件:电子邮件:电子邮件:第六章第六章 字符串处理字符串处理n n 本章将介绍本章将介绍JavaJava语言中字符串的处理技术。主要涉及在程序运行初语言中字符串的处理技术。主要涉及在程序运行初始化后不能改变的字符串类始化后不能改变的字符串类StringString和字符串内容可以动态改变的类和字符串内容可以动态改变的类StringBufferStringBuffer,以及用于进行字符串词法分析类,以及用于进行字符串词法分析类StringTokenizerStringTokenizer。同时还。同时还将介绍字符串和其它数据类型间的转换。将
2、介绍字符串和其它数据类型间的转换。n n 在在C/C+C/C+中,字符串是以字符数组的方式来处理的,以字符中,字符串是以字符数组的方式来处理的,以字符 00 作为字符串结束的标志,因此在进行字符串处理时比较容易发生错误。作为字符串结束的标志,因此在进行字符串处理时比较容易发生错误。而而JavaJava则将字符串作为对象来处理,在对象中封装了一系列方法来进行则将字符串作为对象来处理,在对象中封装了一系列方法来进行字符串处理。利用字符串处理。利用JavaJava字符串处理技术不仅可以减少程序设计的工作量,字符串处理技术不仅可以减少程序设计的工作量,而且使程序编制更加规范,从而可以减少错误的发生。而
3、且使程序编制更加规范,从而可以减少错误的发生。第六章第六章 字符串处理字符串处理6.1 String6.1 String类类类类6.2 StringBuffer6.2 StringBuffer类类类类6.3 StringTokenizer6.3 StringTokenizer类的应用类的应用类的应用类的应用6.4 6.4 字符串与其他数据类型的转换字符串与其他数据类型的转换字符串与其他数据类型的转换字符串与其他数据类型的转换6.1 String类类6.1.16.1.1字符串的构造字符串的构造字符串的构造字符串的构造6.1.2 String6.1.2 String类的常用方法类的常用方法类的常用
4、方法类的常用方法6.1.1字符串的构造字符串的构造6.1.1字符串的构造字符串的构造字符串的声明和其它类一样,如下格式String s;创建字符串可以使用String类的构造方法。例如:s=new String(“We are students”);s=“We are students”;声明和实例化对象也可一步完成:String s=new String(We are students);String s=We are students;6.1.1字符串的构造字符串的构造例如:1)在String类提供的构造方法中,可以由字符数组、字节数组以及字符串缓冲区来构成字符串,如下面的代码所示。cha
5、r 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);利用上面的两个构造方法生成的字符串实例的内容均为“2345”。2)下面例子说明如何利用字节数组生成字符串:byte cDem0l=66,67,68;byte cDem02=65,66,67,68;String strDem01=new String(cDem0l);String strDem02=
6、new String(cDem02,1,3);利用上面的两个构造方法生成的字符串实例的内容均为BCD。6.1.2 String类的常用方法类的常用方法String类提供了length()、charAt()、indexOf()、lastIndexOf()、getChars()、getBytes()、toCharArray()等方法。在这些方法中,按用途来分,可以分为字符串长度计算、字符串比较、字符串检索、字符串的截取、替换等方法,下面我们将详细介绍这些方法。6.1.2 String类的常用方法类的常用方法1、字符串长度计算、字符串长度计算使用String 类中的length()方法可以获取一个字
7、符串的长度。length()方法的定义如下:public int length()该方法返回字符串中的 16-bit 的 Unicode 字符的数量。例如:String s=we are students,tom=我们是学生;int n1,n2,n3;n1=s.length();/n1 的值是15n2=tom.length();/n2的值5n3=”我的爱好”.length();/n3值是46.1.2 String类的常用方法类的常用方法2、字符串比较、字符串比较字符串比较的方法有equals()、equalsIgnoreCase()、startsWith(),endsWith()、region
8、Matches()、compareTo(),compareToIgnoreCase()等方法(1)、equals和和equalsIgnoreCase方法方法 在String类中equals()定义如下:public boolean equals(String s)该方法用来比较当前字符串对象的实体是否与参数指定的字符串s的实体是否相同。例如 String tom=new String(we are students);String boy=new String(We are students);String jerry=new String(we are students);tom.equal
9、s(boy)的值是false,tom.equals(jerry)的值是true.6.1.2 String类的常用方法类的常用方法在String类中equalsIgnoreCase()定义如下:public boolean equalsIgnoreCase(String s)字符串对象调用比较当前字符串对象是否与参数指定的字符串s 相同,比较时忽略大小写。例如:String tom=new String(“ABC”),Jerry=new String(“abc”);tom.equalsIgnoreCase(Jerry)的值是true。(2)、startsWith、endsWith方法方法 字符串
10、对象调用public boolean srartsWith(String s)方法,判断当前字符串对象的前缀是否是参数指定的字符串s,如String tom=220302620629021,jerry=21079670924022;tom.startsWith(220)的值是true;jerry.startsWith(220)的值是false。6.1.2 String类的常用方法类的常用方法可以使用public boolean endsWith(String s)方法,判断一个字符串的后缀是否是字符串s,如 String tom=220302620629021,jerry=2107967092
11、4022;tom.endsWith(021)的值是true jerry.endsWith(021)的值是false.6.1.2 String类的常用方法类的常用方法【例例6-1】通过学号判断某学生是否是2004级的男生。假设某学生学号为“200400581”,前4位为学号,最后1位为性别标志位,0表示女生,1表示男生。程序如下:public class StringStart public static void main(String args)String john=200400581,start=2004;if(john.startsWith(start)&(tom.endsWith(1
12、)System.out.println(该生是2004级男学生。);else System.out.println(“该生不是2004级男学生。);程序的运行结果如下:该生是2004级男学生。6.1.2 String类的常用方法类的常用方法(3)、regionMatches方法方法该方法的申明格式为:public boolean regionMatches(int firstStart,String other,int ortherStart,int length)和public boolean regionMatches(boolean b,int firstStart,String oth
13、er,int ortherStart,int length)从当前字符串参数firstStart指定的位置开始处,取长度为length的一个子串,并将这个子串和参数other 指定的一个子串进行比较。其中other 指定的子串是从参数othertStart 指定的位置开始,从other中取长度为length的一个子串。如果两个子串相同该方法就返回true,否则返回false。注意,字符串的位置编号从0开始。6.1.2 String类的常用方法类的常用方法(4)、compareTo,compareToIgnoreCase方法方法 String类中中compareTo和compareToIgnor
14、eCase方法申明的格式为: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 pareTo(“abcde”);/等于0 按辞典序比较两个字符串还可以使用compareToIgnoreCase(String s)方法,该方
15、法忽略大小写6.1.2 String类的常用方法类的常用方法【例例6-2】将下面的字符串数组按字典序重新排列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=ai;ai=aj;aj=temp;for(int i=0;ia.length;i+)System.out.print(+ai);程序
16、的运行结果如下:Basic C+Fortran Java SmallTalkn nclass StringArrayclass StringArrayn n n n public static void main(String args)public static void main(String args)n n n n /定义字符串数组定义字符串数组定义字符串数组定义字符串数组n nString array=new StringThis is a test,String array=new StringThis is a test,n nTheo Washer,Theo Washer,n
17、n the case is closed,the case is closed,n ntHe aLtErNaTiNg StRiNgtHe aLtErNaTiNg StRiNgn n;n n System.out.println(System.out.println(排序之前:排序之前:排序之前:排序之前:+n);+n);n n /打印出排序之前的字符串数组打印出排序之前的字符串数组打印出排序之前的字符串数组打印出排序之前的字符串数组n nfor(int i=0;i array.length;i+)for(int i=0;i array.length;i+)n n System.out.prin
18、tln(arrayi);System.out.println(arrayi);n n n n System.out.println(System.out.println(排序之后:排序之后:排序之后:排序之后:+n);+n);n n /调用调用调用调用ArraysArrays对象的方法对字符串数组进行排序对象的方法对字符串数组进行排序对象的方法对字符串数组进行排序对象的方法对字符串数组进行排序n n java.util.Arrays.sort(array,String.CASE_INSENSITIVE_ORDER);java.util.Arrays.sort(array,String.CASE
19、_INSENSITIVE_ORDER);n n /打印出排序之后的字符串数组打印出排序之后的字符串数组打印出排序之后的字符串数组打印出排序之后的字符串数组n n for(int i=0;i array.length;i+)for(int i=0;i array.length;i+)n n System.out.println(arrayi);System.out.println(arrayi);n n /7-5 MainA.java/7-5 MainA.javaimport java.util.*;import java.util.*;class Main class Main public
20、static void main(String args)public static void main(String args)String strs=dog,pig,cat;String strs=dog,pig,cat;Arrays.sort(strs);Arrays.sort(strs);/“catcat”,“dogdog”,“pigpig”System.out.println(Arrays.asList(strs);System.out.println(Arrays.asList(strs);int ints=9,5,1,7;int ints=9,5,1,7;Arrays.sort(
21、ints);Arrays.sort(ints);for(int i=0;iints.length;i+)for(int i=0;iints.length;i+)/1 5 7 9 /1 5 7 9 System.out.print(intsi+);System.out.print(intsi+);/SortDemo.java/SortDemo.javaimport java.util.*;import java.util.*;public class SortDemopublic class SortDemo/实现实现实现实现ComparatorComparator接口的静态类接口的静态类接口的
22、静态类接口的静态类static class Comp implements Comparatorstatic class Comp implements Comparatorpublic int compare(Object obj1,Object obj2)public int compare(Object obj1,Object obj2)String s1=obj1.toString().toLowerCase();String s1=obj1.toString().toLowerCase();String s2=obj2.toString().toLowerCase();String
23、s2=obj2.toString().toLowerCase();return pareTo(s2);return pareTo(s2);/程序的入口方法程序的入口方法程序的入口方法程序的入口方法public static void main(String args)public static void main(String args)String strMonths=String strMonths=One,Two,three,One,Two,three,Four,five,Six,Four,five,Six,Sevent,eight,Night,Sevent,eight,Night,Te
24、n,eleven,TwelveTen,eleven,Twelve;/利用利用利用利用ArraysArrays类进行排序类进行排序类进行排序类进行排序Arrays.sort(strMonths);Arrays.sort(strMonths);/get count of months/get count of monthsint nMonthLen=strMonths.length;int nMonthLen=strMonths.length;/按照字母顺序进行排序按照字母顺序进行排序按照字母顺序进行排序按照字母顺序进行排序for(int i=0;i nMonthLen;i+)for(int i=
25、0;i nMonthLen;i+)System.out.print(strMonthsi+);System.out.print(strMonthsi+);System.out.println();System.out.println();/用比较器进行构造用比较器进行构造用比较器进行构造用比较器进行构造Arrays.sort(strMonths,new Comp();Arrays.sort(strMonths,new Comp();for(int i=0;i nMonthLen;i+)for(int i=0;i=0;i-)dest.append(source.charAt(i);return
26、dest.toString();程序运行结果如下:程序运行结果如下:avaJ evol I第六章第六章 字符串处理字符串处理6.1 String6.1 String类类类类6.2 StringBuffer6.2 StringBuffer类类类类6.3 StringTokenizer6.3 StringTokenizer类的应用类的应用类的应用类的应用6.4 6.4 字符串与其他数据类型的转换字符串与其他数据类型的转换字符串与其他数据类型的转换字符串与其他数据类型的转换6.3 StringTokenizer类类 6.3.1 6.3.1 构造方法构造方法构造方法构造方法6.3.2 StringTo
27、kenizer6.3.2 StringTokenizer类的常用方法类的常用方法类的常用方法类的常用方法6.3.1 构造方法构造方法StringTokenizerStringTokenizer类提供三种形式的构造函数:类提供三种形式的构造函数:StringTokenizer(String str)StringTokenizer(String str)StringTokenizer(String sb StringTokenizer(String sb,String delim)/delimString delim)/delim为分隔符号为分隔符号 StringTokenizer(String
28、SbStringTokenizer(String Sb,String delimString delim,boolean returnTokens)boolean returnTokens)在对一个字符串进行解析的时候,在字符串中必须包括一个用于解析的分隔符号。在对一个字符串进行解析的时候,在字符串中必须包括一个用于解析的分隔符号。JavaJava置默认的分隔符为空格、制表符置默认的分隔符为空格、制表符(t)(t)、换行符、换行符(n)(n)、回车符、回车符(r)(r)。如果在程。如果在程序计中想采用自定义的分隔符,可以通过在构造函数中指定序计中想采用自定义的分隔符,可以通过在构造函数中指定d
29、elimdelim项来设置用户项来设置用户分隔符。相应地,在分隔符。相应地,在StringTokenizerStringTokenizer类中提供了相应的成员方法:类中提供了相应的成员方法:另外,如果另外,如果 returnTokens returnTokens 标志为标志为 true,true,则分隔符字符也被作为标记返回。每个分隔则分隔符字符也被作为标记返回。每个分隔符作为长度为一的字符串返回。如果标志为符作为长度为一的字符串返回。如果标志为 false,false,则跳过分隔符字符,且把它作则跳过分隔符字符,且把它作为标记之间的分隔符。为标记之间的分隔符。例如:例如:StringToke
30、nizer fenxi=new StringTokenizer(we are student);StringTokenizer fenxi=new StringTokenizer(we are student);StringTokenizer fenxi=new StringTokenizer(we,are;student,;);StringTokenizer fenxi=new StringTokenizer(we,are;student,;);6.3.2 StringTokenizer6.3.2 StringTokenizer类的常用方法类的常用方法类的常用方法类的常用方法1 1统计分隔符
31、数量统计分隔符数量统计分隔符数量统计分隔符数量public int countTokens()public int countTokens()该方法返回的是字符串中的当前单词的数量,为整数。例如:该方法返回的是字符串中的当前单词的数量,为整数。例如:String str=new String(I love Java);String str=new String(I love Java);StringTokenizer st=new StringTokenizer(str);StringTokenizer st=new StringTokenizer(str);int nTokens=st.co
32、untTokens();/int nTokens=st.countTokens();/值为值为3 32 2匹配和寻找分隔符匹配和寻找分隔符匹配和寻找分隔符匹配和寻找分隔符通常,下面的两个组合方法均可以用来完成分隔符的寻找和匹配:通常,下面的两个组合方法均可以用来完成分隔符的寻找和匹配:hasMoreElements()hasMoreElements()、nextElement()nextElement()和和hasMoreTokens()hasMoreTokens()、nextToken()nextToken()、nextToken(String delim)nextToken(String
33、delim)一般是用一般是用hasMoreTokenshasMoreTokens方法判断在字符串中是否还有已经定义的分隔符。如果有,方法判断在字符串中是否还有已经定义的分隔符。如果有,除分隔符后、到下一个分隔符之前的内容进行一次循环。如果没有则终止循环。除分隔符后、到下一个分隔符之前的内容进行一次循环。如果没有则终止循环。下面的两个程序应用下面的两个程序应用hasMoreTokens()hasMoreTokens()、nextToken()nextToken()方法来寻找方法来寻找StringString对象中的分对象中的分隔符。隔符。6.3.2 StringTokenizer6.3.2 St
34、ringTokenizer类的常用方法类的常用方法类的常用方法类的常用方法【例例例例6-56-5】利用利用StringTokenizerStringTokenizer类进行简单词法分析类进行简单词法分析/TestToken.java/TestToken.javaimport java.util.*;import java.util.*;public class TestTokenpublic class TestToken public static void main(String args)public static void main(String args)/构造构造StringTok
35、enizerStringTokenizer对象对象StringTokenizer st=new StringTokenizerStringTokenizer st=new StringTokenizer(this is a Java programming);(this is a Java programming);/在字符串中匹配默认的分隔符在字符串中匹配默认的分隔符 while(st.hasMoreTokens()while(st.hasMoreTokens()/打印当前分隔符和下一分隔符之间的内容打印当前分隔符和下一分隔符之间的内容 System.out.println(st.nextT
36、oken();System.out.println(st.nextToken();程序运行结果如下程序运行结果如下thisisaJavaProgramming第六章第六章 字符串处理字符串处理6.1 String6.1 String类类类类6.2 StringBuffer6.2 StringBuffer类类类类6.3 StringTokenizer6.3 StringTokenizer类的应用类的应用类的应用类的应用6.4 6.4 字符串与其他数据类型的转换字符串与其他数据类型的转换字符串与其他数据类型的转换字符串与其他数据类型的转换6.4 6.4 字符串与其他数据类型的转换字符串与其他数据类
37、型的转换字符串与其他数据类型的转换字符串与其他数据类型的转换6.4.1 6.4.1 其他数据转换为字符串其他数据转换为字符串其他数据转换为字符串其他数据转换为字符串6.4.2 6.4.2 字符串转化成其他数据字符串转化成其他数据字符串转化成其他数据字符串转化成其他数据6.4.1 其他数据转换为字符串其他数据转换为字符串 String类中提供了静态方法valueOf(),用来把不同类型的简单数据转化为字符串。申明格式如下:public static String valueOf(boolean b)public static String valueOf(char c)public static
38、 String valueOf(char data)public static String valueOf(char data,int offset,int count)public static String valueOf(double d)public static String valueOf(float f)public static String valueOf(long l)public static String valueOf(Object obj)6.4.1 其他数据转换为字符串其他数据转换为字符串【例例6-7】将简单数据转换成字符串public class Covert
39、String public static void main(String args)int nInt=10;float fFloat=3.14f;double dDouble=3.1415926;/转换为整型Integer obj1=new Integer(nInt);/转换为浮点数类型Float obj2=new Float(fFloat);/转换为双精度类型Double obj3=new Double(dDouble);/分别调用toString方法转换为字符串String strString1=obj1.toString();System.out.println(strString1)
40、;String strString2=obj2.toString();System.out.println(strString2);String strString3=obj3.toString();System.out.println(strString3);n nimport java.util.*;import java.util.*;class A1 class A1 public static void main(String args)public static void main(String args)Calendar c=Calendar.getInstance();Cale
41、ndar c=Calendar.getInstance();c.setTime(new Date();c.setTime(new Date();String y=String.valueOf(c.get(Calendar.YEAR),String y=String.valueOf(c.get(Calendar.YEAR),m=String.valueOf(c.get(Calendar.MONTH)+1);m=String.valueOf(c.get(Calendar.MONTH)+1);System.out.println(System.out.println(现在的时间是:现在的时间是:现在
42、的时间是:现在的时间是:););System.out.println(y+System.out.println(y+年年年年+m+m+月月月月););System.out.print(c.get(Calendar.YEAR);System.out.print(c.get(Calendar.YEAR);System.out.print(c.get(Calendar.MONTH)+1);System.out.print(c.get(Calendar.MONTH)+1);6.4.2 字符串转化成其他数据字符串转化成其他数据 同时,类Integer、Double、Float和Long中也提供了方法va
43、lueOf()把一个字符串转化为对应的数字对象类型。其申明格式如下:public static Double valueOf(String s)throws NumberFormatExceptionpublic static Integer valueOf(String s)throws NumberFormatExceptionpublic static Float valueOf(String s)throws NumberFormatExceptionpublic static Long valueOf(String s)throws NumberFormatExceptionpubl
44、ic static Double valueOf(String s)throws NumberFormatException特别注意的是,若该 String 不能作为相应数据类型对象的转换,则抛出异常。用户可以调用Integer、Double、Long、Float类中的ValueOf方法将字符串转换为相应的封装数据类型,进而转换为简单数据类型。6.4.2 字符串转化成其他数据字符串转化成其他数据 Double、Float、Integer、Long等类都提供了doubleValue(),floatValue(),intValue(),longValue()等方法将对象转换成其他简单数据类型的方法
45、。例如:String strPI=”3.1415926”;Double dpi=Double.valueOf(strPI);double ddPI=dpi.doubleValue();float ffPI=dpi.floatValue();同时Boolean、Byte、Double、Float、Integer、Long等类也分别提供了静态方法parseDouble(String)、parseFloat(String)、parseInt(String)、parseLong(String)等方法将对象转换成其他简单数据类型的方法。其方法声明格式如下:staticboolean parseBoole
46、an(Strings)staticint parseInt(Strings,intradix)staticbyte parseByte(Strings)staticdouble parseDouble(Strings)staticfloatparseFloat(Strings)6.4.2 字符串转化成其他数据字符串转化成其他数据【例例6-8】将字符串转换为相应的简单数据类型。将字符串转换为相应的简单数据类型。public class CovertSimple public static void main(String args)char cArray;int nInt;float fFloa
47、t;double dDouble;String strString=new String(I love Java);String strInteger=new String(314);String strFloat=new String(3.14);String strDouble=new String(3.1416);cArray=strString.toCharArray();System.out.println(cArray);nInt=Integer.parseInt(strInteger);System.out.println(nInt);fFloat=Float.parseFloat(strFloat);System.out.println(fFloat);dDouble=Double.parseDouble(strDouble);System.out.println(dDouble);上面程序的输出为:上面程序的输出为:I love Java3143.143.1416