《第4章 字符串.ppt》由会员分享,可在线阅读,更多相关《第4章 字符串.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ContentsString 字符串类 1StringBuffer字符串类 2命令行参数 3第4章 字 符 串v字符串是字符的序列,它是组织字符的基本数据结构,对于字符串是字符的序列,它是组织字符的基本数据结构,对于大多数程序来说都是很重要的,即使在图形程序中也需要对大多数程序来说都是很重要的,即使在图形程序中也需要对字符串(文件名和其他对象名)进行处理。字符串中可以包字符串(文件名和其他对象名)进行处理。字符串中可以包含字母、数字和其他各种特殊字符,如含字母、数字和其他各种特殊字符,如+、-、*、/等。在有等。在有些语言中(如些语言中(如C语言),字符串就是用字符数组来实现的,语言),字符串
2、就是用字符数组来实现的,而在而在Java中是将字符串当作对象来处理,它提供了一系列的中是将字符串当作对象来处理,它提供了一系列的字符串操作方法,使字符串的处理更加容易和规范。字符串操作方法,使字符串的处理更加容易和规范。vJava语言中的包语言中的包java.lang中封装了中封装了final类类String和和StringBuffer,其中类,其中类String对象是字符串常量,建立后不对象是字符串常量,建立后不能改变。而类能改变。而类StringBuffer对象类似于一个字符缓冲区,建对象类似于一个字符缓冲区,建立后可以修改。这两个类共同的特点都不能再派生子类,即立后可以修改。这两个类共同
3、的特点都不能再派生子类,即它们不能被其他类继承。它们不能被其他类继承。4.1 String 字符串类字符串类v首先要清楚的是,字符串常量和字符常量的区别。首先要清楚的是,字符串常量和字符常量的区别。字符常量是用单引号括起来的单个字符,如字符常量是用单引号括起来的单个字符,如a,3,052等。而字符串常量是用双等。而字符串常量是用双引号括起来的字符序列,如引号括起来的字符序列,如a,java,n等。等。在在Java中,每个字符串常量对应一个中,每个字符串常量对应一个String类的类的对象,所以一个字符串常量可以直接调用类对象,所以一个字符串常量可以直接调用类String中提供的方法,例如:中提
4、供的方法,例如:vint len=hello.length();v将得到字符串的长度将得到字符串的长度5,字符串的长度即字符串中,字符串的长度即字符串中字符的个数。字符的个数。v本节主要讨论存放字符串常量的本节主要讨论存放字符串常量的String类,包括类,包括String对象的创建、使用和操作。对象的创建、使用和操作。4.1.1 类类String字符串的创建字符串的创建vString类是字符串常量类,类是字符串常量类,String对象建立对象建立后不能修改。以前使用的每个字符串常量后不能修改。以前使用的每个字符串常量实际上都是实际上都是String对象,如字符串对象,如字符串“hello”在
5、编译后即成为在编译后即成为String对象。因此,可以用对象。因此,可以用字符串常量直接初始化一个字符串常量直接初始化一个String对象。对象。v例如:例如:vString s=Java Program;v通过类通过类String提供的默认的构造方法不需要提供的默认的构造方法不需要任何参数,它生成一个空字符串。如:任何参数,它生成一个空字符串。如:vSting s=new String();/建立一个空字符串建立一个空字符串对象对象v通过使用类通过使用类String提供的构造方法,除了可提供的构造方法,除了可以生成一个空字符串,还可以用字符数组以生成一个空字符串,还可以用字符数组或字节数组来
6、生成一个字符串对象。其他或字节数组来生成一个字符串对象。其他创建创建String对象的构造方法如表对象的构造方法如表6-1所示。所示。构造方法功能String(String value)用常量串value创建一个字符串对象String(StringBuffer buffer)用变量串buffer创建一个字符串对象String(char value)用字符数组value创建一个字符串对象String(char value,int offset,int count)用字符数组value的offset位置开始的count个字符,创建一个字符串对象String(byte ascii,int hiByt
7、e)用字节数组ascii创建一个字符串对象,Unicode字符的高位字节为hiByte,通常应该为0String(byte ascii,int hiByte,int startIndex,int count)用字节数组ascii 从startIndex位置开始的count个字符创建一个字符串对象,hiByte通常为0注意注意:v由于在由于在Internet上通常使用的字符都为上通常使用的字符都为8位位的的ASCII码,码,Java提供了从字节数组来初始提供了从字节数组来初始化字符串的方法,并且用化字符串的方法,并且用hiByte来指定每来指定每个字符的高位字节。对个字符的高位字节。对ASCII
8、码来说,码来说,hiByte应为应为0,对于其他非拉丁字符集,对于其他非拉丁字符集,hiByte的值应该非的值应该非0。【例例4.1】String构造方法的使用。构造方法的使用。vpublic class UseConstructorsvpublic static void main(String args)v String s1,s2,s3,s4,s5,s6,s7;v byte b=(byte)J,(byte)a,(byte)v,(byte)a;v char c=基,础,教,程;v StringBuffer sb=new StringBuffer(你好);v s1=new String();
9、v s2=new String(Hello);v s3=new String(sb);v s4=new String(c);v s5=new String(c,0,2);v s6=new String(b,0);v s7=new String(b,0,1,2);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.
10、out.println(s7=+s7);4.1.2 类类String字符串处理的常用方法字符串处理的常用方法v类类String中提供的访问中提供的访问String字符串的方法很多,大体上字符串的方法很多,大体上可分为比较、判断前后缀、单个字符的查找、子字符串定可分为比较、判断前后缀、单个字符的查找、子字符串定位、连接和类转换等几类。位、连接和类转换等几类。v1类类String字符串的比较字符串的比较v(1)boolean equals(Object anObject)和和boolean equalsIgnoreCase(String anString)v功能:用来比较两个字符串的值是否相等,不
11、同的是后者功能:用来比较两个字符串的值是否相等,不同的是后者忽略字母的大小写。例如下面的表达式:忽略字母的大小写。例如下面的表达式:vjava.equals(java)/值为值为truevjava.equalsIgnoreCase(JAVA)/值为值为truev注意:它们与运算符注意:它们与运算符“=“实现的比较是不同的。运算符实现的比较是不同的。运算符“=“比较两个字符串对象是否引用同一个实例对象,而比较两个字符串对象是否引用同一个实例对象,而equals()和和equalsIgnoreCase()则比较两个字符串中对应的每个则比较两个字符串中对应的每个字符是否相同。字符是否相同。例如:例如
12、:vString s1=new String(java);vString s2=new String(java);vString s3=s1;vSystem.out.println(s1=s2);vSystem.out.println(java=java);vSystem.out.println(s1=s3);System.out.println(s1.equals(s2);v(2)int compareTo(String anString)和int compareToIgnoreCase(String str)v功能:用于比较两个字符串的大小,所不同的是后者忽略字母大小写。通过返回的整数值指
13、明当前字符串与参数字符串的大小关系。若调用串比参数串大,返回正整数;反之,返回负整数;相等则返回0。v比较方法:v若比较的两个字符串有不同的字符,则从左边数起的第一个不同字符的大小即两个字符串的大小,字符的大小建立在Unicode字符集基础上,方法的返回值为:v调用串中的第一个不同字符-参数串中的第一个不同字符。v 例如:v pareTo(that)/值为8;因为i-a=8v若比较的两个字符串各个位置的字符都相同,仅长度不同,则方法的返回值为:v调用串的长度-参数串的长度v例如:v pareTo(abc)/值为4-3=1(3)boolean regionMatches(int toffset,
14、String other,int ooffset,int len)和boolean regionMatches(Boolean ignoreCase,int toffset,String other,int ooffset,int len);v功能:用于比较两个字符串中指定区域的子字符串是否相同。v其中,toffset和ooffset分别指明当前字符串和参数字符串中所要比较的子字符串的起始位置,len指明比较的字符个数(长度),而ignoreCase指明比较时是否区分大小写,若无此参数,比较是区分大小写的。v例如:vJava.regionMatches(0,java,0,4)/falsevJa
15、va.regionMatches(true,0,java,0,4)/true2判断字符串的前缀和后缀判断字符串的前缀和后缀vboolean startsWith(String prefix)和vboolean endsWith(String suffix)v用于判断当前字符串的前缀和后缀是否和指定的字符(或字符串)相同。如:v居民身份证的最后一位数字表示性别,奇数为男性,偶数为女性,则可通过下面的语句来辨别某位居民的性别:vif(s.endsWith(1)|s.endsWith(3)|s.endsWith(5)|s.endsWith(7)|s.endsWith(9)vSystem.out.pr
16、intln(此人为男性);velse System.out.println(此人为女性);v3字符串中单个字符的查找v(1)char charAt(int index)v功能:返回字符串在index处的字符,index的值从0到串长度减1。例如:vSystem.out.println(Java.charAt(1);/输出为av(2)int indexOf(int ch);和v int indexOf(int ch,int fromIndex)v功能:返回当前字符串中某特定字符ch出现的位置。第1种方法从前向后顺序查找,v第2种方法从指定位置fromIndex之后开始查找,若找到,则返回该字符第
17、1次出现的位置序号,否则返回-1。v【例4.2】indexOf的使用vclass UseIndexOfvpublic static void main(String args)vString s=java program language;vint i=-1;vdoi=s.indexOf(int)g,i+1);System.out.print(i+t);while(i!=-1);vvv运行结果:v81619-14类类String子字符串的定位子字符串的定位v1.int indexOf(String str)和v int indexOf(String str,int fromIndex)v in
18、t lastIndexOf(String str)和v int lastIndexOf(String str,int fromIndex)v方法indexOf()的功能是从前向后查找指定子字符串在主串中出现的位置。v方法lastIndexOf()的功能是从后向前查找指定子字符串在主串中出现的位置。v 例4.3 lastIndexOf的使用vclass UseLastIndexOfvpublic static void main(String args)vString s=java program language;vint i=s.length();vdovi=s.lastIndexOf(g,
19、i-1);vSystem.out.print(i+t);vwhile(i!=-1);vvv运行结果:v19 16 8 -1v2.String substring(int beginindex)v String substring(int beginindex,int endindex)v功能:返回子字符串。前者从主串的beginindex处开始到串尾获取一个子串返回;后者从主串的beginindex处开始到endindex-1处获取一个子串返回,子串的长度=endindex-beginindex。v【例4.4】substring方法的使用vclass UseSubstringvvpublic
20、static void main(String args)vvString s1=java program language;vint beginindex=s1.indexOf(p);vint endindex=s1.lastIndexOf(m);vString s2=s1.substring(beginindex,endindex+1);vSystem.out.println(s2);vvv运行结果:vprogram5字符串的连接字符串的连接vString concat(String str);v功能:将str连接到主串的末尾,并返回连接后的字符串,但是主串本身并没有改变。v如下面的例子:
21、vString s=java;vSystem.out.println(s.concat(程序设计);vSystem.out.println(s);v运行结果:vjava程序设计vjavav注意:在注意:在java中,重载的运算符中,重载的运算符+也可以实现字也可以实现字符串的连接或字符串与其他类对象的连接。符串的连接或字符串与其他类对象的连接。6String类的转换类的转换v(1)static String valueOf(Object obj)v功能:将其他类的参数转换为字符串对象并返回。由于Object类是所有类的父类,所以此方法是重载的,参数可以是java中的任何类型。v例如:vdoub
22、le x=3.1415926;vString s=String.valueOf(x);/将double类型转换成String类的对象v注意:其他类也提供了方法注意:其他类也提供了方法valueOf(),用来将一个字符串转换成相应,用来将一个字符串转换成相应类的对象。类的对象。v例如:vString s=3.1415926;vDouble d=Double.valueOf(s);/将String类的对象转换成Double类的对象vdouble y=d.doubleValue();/将Double类的对象转换成double类型的数据v(2)toString()v该方法的功能是把其他类的对象转换成字
23、符串对象。v如:vString s=Integer.toString(34,16);/将十进制数34转换成16进制字符串vSystem.out.println(s);/输出为22v(3)toCharArray()v该方法的功能是将字符串转换成一个字符数组。v如:vString s1=We like orange;vchar s2=s1.toCharArray();vSystem.out.println(String.valueOf(s2,8,6);v输出结果:vorangev7类String的其他方法v(1)字符串中字符大小写的转换v 可以利用String类提供的下列方法进行转换。v publ
24、ic String toLowerCase()v 该方法将字符串中所有字符转换成小写,并返回转换后的新串。v public String toUpperCase()v 该方法将字符串中所有字符转换成大写,并返回转换后的新串。v(2)去除字符串中多余空格v public String trim()v该方法只是去掉开头和结尾的空格,并返回得到的新字符串。值得注意的是,在字符串中间的空格并不会被去掉。v(3)字符串中字符的替换v public String replace(char oldChar,char newChar)v 该方法用字符newChar替换当前字符串中所有是oldChar的字符,返
25、回一个新字符串。v public String replaceFirst(String regex,String replacement)v 该方法用字符串replacement的内容替换当前字符串中遇到的第一个和字符串regex相一致的子串,并将产生的新字符串返回。v public String replaceAll(String regex,String replacement)v 该方法用字符串replacement的内容替换当前字符串中所有和字符串regex相一致的子串,并将产生的新字符串返回。4.2 StringBuffer字符串类v与实现字符串常量的String类不同的是,Stri
26、ngBuffer类的每个对象都是可以扩充和修改的字符串变量,使用起来比String类更加方便。v本节主要讨论存放字符串变量的StringBuffer类,包括StringBuffer对象的创建、使用和修改操作。4.2.1 类StringBuffer字符串的创建构造方法功能StringBuffer()建立空的字符串对象,系统为字符串分配16个字符大小的缓冲区StringBuffer(int length)建立长度为length的字符串对象,字符串缓冲区的初始长度也为lengthStringBuffer(String str)建立一个初值为String类对象str的字符串对象,同时系统还为该串分配1
27、6个字符大小的空间4.2.2 类StringBuffer字符串的常用方法v1字符设置和替换v(1)void setCharAt(int index,char ch)v功能:设置指定位置index的字符值为chv如:StringBuffer str=new StringBuffer(stident);v str.setCharAt(2,u)/将str字符串中的第二个字符替换为uv(2)StringBuffer replace(int start,int end,String str)v功能:将StringBuffer对象字符串从start至end-1处,用字符串str来替换v如:StringBu
28、ffer str=new StringBuffer(happy new year);v System.out.println(str.replace(6,14,birthday);v输出结果:vhappy birthdayv2.设置/获取类StringBuffer字符串对象长度和容量v(1)void setLength(int newLength)v功能:设置字符串的长度为newLength,这时字符串缓冲区中指定长度以后的字符值均为零v(2)int length()v功能:获取字符串对象的长度v(3)void ensureCapacity(int minimumCapacity)v功能:设定
29、字符串缓冲区的大小,保证缓冲区的容量至少为指定的值minimumCapacity,若当前缓冲区容量小于参数值,则分配新的较大的缓冲区,新容量取以下两者中的大者:v参数minimumCapacity的值v老容量的两倍加2v(4)int capacity()v【例4.5】StringBuffer字符串长度Length和容量Capacity的设置和获取vpublic class LengthAndCapacityvvpublic static void main(String args)vv StringBuffer sb1=new StringBuffer();v StringBuffer sb2
30、=new StringBuffer(30);v StringBuffer sb3=new StringBuffer(abcde);v System.out.println(sb1.capacity=+sb1.capacity();v System.out.println(sb1.length=+sb1.length();v System.out.println(sb2.capacity=+sb2.capacity();v System.out.println(sb2.length=+sb2.length();v System.out.println(sb3.capacity=+sb3.capa
31、city();v System.out.println(sb3.length=+sb3.length();vsb2.ensureCapacity(50);vsb3.setLength(3);vSystem.out.println(sb2.capacity=+sb2.capacity();v System.out.println(sb2.length=+sb2.length();v System.out.println(sb3.capacity=+sb3.capacity();v System.out.println(sb3.length=+sb3.length();vvv【例4.6】在Stri
32、ngBuffer字符串末尾添加内容vpublic class StringBufferAppendvvpublic static void main(String args)vvStringBuffer sb=new StringBuffer(happy);vsb.append(new);vsb.append(year);vSystem.out.println(sb);v System.out.println(sb.capacity=+sb.capacity();vSystem.out.println(sb.length=+sb.length();vv运行结果:happynewyearsb.c
33、apacity=21sb.length=12v(2)StringBuffer insert(int offset,char ch)v功能:在字符串的指定位置offset处插入字符chv【例4.7】StringBuffer字符串的insert方法的使用vpublic class UseInsertvvpublic static void main(String args)vvStringBuffer sb=new StringBuffer(world);vsb.insert(0,hello);vSystem.out.println(sb);vv运行结果:helloworldv【例4.8】对Str
34、ingBuffer字符串进行颠倒操作vpublic class UseReversevvpublic static void main(String args)vvStringBuffer sb1=new StringBuffer(abcde);vStringBuffer sb2=sb1.reverse();vSystem.out.println(sb1);vSystem.out.println(sb2);vv运行结果:edcbaedcbav4.获取类StringBuffer对象的子字符串或字符v(1)void getChars(int srcBegin,int srcEnd,char dst
35、,int dstBegin)v功能:将StringBuffer对象字符串中字符复制到目标字符数组dst中去。复制的字符从srcBegin处开始,到srcEnd-1处结束,复制字符的个数为srcEnd-srcBegin,字符被复制到目标数组dst的dstBegin至dstBegin+(srcEnd-srcBegin)-1处v如:char c=*;v StringBuffer sb=new StringBuffer(hello);v sb.getChars(0,5,c,3);v System.out.println(c);/输出*hello*v(2)String substring(int sta
36、rt)和String substring(int start,int end)v功能:获取StringBuffer字符串对象从start处开始的子串;获取StringBuffer字符串对象从start开始到end-1处的子串。v如:vStringBuffer sb=new StringBuffer(java program);vSystem.out.println(sb.substring(5);/输出programvSystem.out.println(sb.substring(0,4);/输出javav5.类型转换v类StringBuffer重写了方法tostring(),可将类Strin
37、gBuffer的对象转换成类string的对象.如:vStringBuffer sb=new StringBuffer(java);vString s=sb.toString();vSystem.out.println(s);4.3 命令行参数v在main()方法名后的括号中有String类的数组参数args,是用来接收Java命令行传送给java应用程序的数据。命令行参数就是在执行字节码文件时,命令行上字节码文件名后给出的内容。例如:vjava UseString hello java worldv其中:UseString是字节码文件名,hello java world就是命令行参数vJav
38、a通过args字符串数组来得到并处理这些内容,命令行参数有多个时,要用空格隔开,这些参数将按顺序逐个存入args数组中,第一个参数hello存入args0,第二个参数java存入args1,第三个参数world存入args2。v注:要想将包含有多个空格的单词作为一个字符串时,可用引号括起来。如:vjava UseString hello java world v【例4.9】vpublic class Commandvvpublic static void main(String args)vvfor(int i=0;iargs.length;i+)vSystem.out.println(arg
39、s+i+=+argsi);vvv若执行程序的命令为:vjava Command hello javav则程序运行结果为:vargs0=hellovargs1=javav【例4.10】用命令行参数方式提供两个整数,把它们相乘后输出。vpublic class UseComLParamv public static void main(String args)v int s,s1,s2;v if(args.length2)v v System.out.println(运行本程序需提供两个命令行参数);v System.exit(0);v v s1=Integer.parseInt(args0);v
40、 s2=Integer.parseInt(args1);v s=s1*s2;v System.out.println(s1+*+s2+=+s);v v执行该程序的过程如下:编译:javac UseComLParam.java运行:java UseComLParam 3 4运行结果:3*4=12本章小结本章小结v通过本章的学习了解Java中字符串类的基本概念,掌握字符串的一些常用方法及其使用。字符串指的是字符的序列,用双引号括起来的字符的序列都是字符串。v在Java有两种类型的字符串:一种是创建以后不需要改变的,称为字符串常量,在Java中,String类用于存储和处理字符串常量;另外一种字符串是创建以后,需要对其进行改变的,称为字符串变量,在Java中,StringBuffer类用于存储和操作字符串变量。v通过实验训练,掌握两种字符串的一些常用的方法来解决Java中的一些文字问题,将十分方便。v字符串可以作为main()方法的参数,传递给应用程序,利用String args数组来进行操作,输入时放在命令行字节码文件名的后面,称为“命令行参数”,它是向Java Application程序传递参数数据的常用而且有效的手段。