字符串和正则表达式.ppt_第1页
字符串和正则表达式.ppt_第2页
字符串和正则表达式.ppt_第3页
字符串和正则表达式.ppt_第4页
字符串和正则表达式.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第6章字符串和正则表达式,本章导读 1. String类 2. StringBuffer类 3. StringTokenizer类 4. 正则表达式与模式匹配 5正则表达式与字符串分解,2,6.1 String类,Java使用java.lang包中的String类来创建一个字符串变量,因此字符串变量是类类型变量,是一个对象。 字符串常量 如 :“你好”、“1234.987”、“weqweo”。 1创建字符串对象 使用String类的构造方法创建字符串对象: 例如: String s; s=new String(we are students); 声明和创建可用一步完成: String s=

2、new String(we are students); 也可以用一个已创建的字符串创建另一个字符串,如: String tom=String(s);,3,String类还有两个较常用构造方法: (1)String (char a):用一个字符数组a 创建一个字符串对象,如: char a=b,o,y; String s=new String(a); (2)String(char a,int startIndex,int count):提取字符数组a 中的一部分字符创建一个字符串对象,参数startIndex和count分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数,例如: ch

3、ar a=s,t,b,u,s,n; String s=new String(a,2,3); 2引用字符串常量对象 字符串常量是对象,因此可以把字符串常量的引用赋值给一个字符串变量 (p113图6.1) String s1,s2; s1=“How are you”; s2=“How are you”; S1,s2具有相同的引用。,4,3String 类的常用方法 (1)public int length() 使用String 类中的length()方法可以获取一个字符串的长度 (2)public boolean equals(String s) 字符串对象调用String类中的equals方法,

4、比较当前字符串对象的实体是否与参数指定的字符串s的实体相同 (p114) (3)public boolean contains(String s)(p114) 例子,5,(4)public boolean startsWith(String s)、public boolean endsWith(String s)方法 字符串对象调用startsWith(String s)方法,判断当前字符串对象的前缀是否是参数指定的字符串s 字符串对象调用endsWith(String s)方法,判断当前字符串对象的后缀是否是参数指定的字符串s(例p114) (5)public int compareTo(S

5、tring s)方法 字符串对象可以使用String类中的compareTo(String s)方法,按字典序与参数s指定的字符串比较大小。如果当前字符串与s相同,该方法返回值0;如果当前字符串对象大于s,该方法返回正值;如果小于s,该方法返回负值。 (例p115),6,(6)public int indexOf (String s) 字符串调用方法indexOf (String s)从当前字符串的头开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。 字符串调用indexOf(String s ,int startpoint)方法从当前字符串的startp

6、oint位置处开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。 字符串调用lastIndexOf (String s)方法从当前字符串的头开始检索字符串s,并返回最后出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。 (例p115),7,(7)public String substring(int startpoint) 字符串对象调用该方法获得一个当前字符串的子串,该子串是从当前字符串的startpoint处截取到最后所得到的字符串。 字符串对象调用substring(int start ,int end)方法获得一个当前字符串的子串,该子串

7、是从当前字符串的start处截取到end处所得到的字符串,但不包括end处所对应的字符。 (例p115) (8)public String replaceAll(String old ,String new) 字符串对象s调用该方法可以获得一个串对象,这个串对象是通过用参数new指定的字符串替换s中由old指定的所有字符串而得到的字符串。 (9)public String trim() 一个字符串s通过调用方法trim()得到一个字符串对象,该字符串对象是s去掉前后空格后的字符串。,8,4字符串与基本数据的相互转化 java.lang包中的Integer类调用其类方法: public stat

8、ic int parseInt(String s) 可以将“数字”格式的字符串,如“12387”,转化为int型数据。 类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法: public static byte parseByte(String s) public static short parseShort(String s) public static long parseLong(String s) public static double parseFloat(String s) public static double pa

9、rseDouble(String s) 同样可以将“数字”格式的字符串,转化为相应的基本数据类型。,9,使用Long类中的p116中的类方法可得到整数的各种进制的字符串表示: 例子2 有关public static void main(String args )中的String args (p116) 有时,我们需要将数字转化为字符串,可以使用String 类的下列类方法: public String valueOf(byte n) public String valueOf(int n) public String valueOf(long n) public String valueOf(

10、float n) public String valueOf(double n) 5对象的字符串表示 所有的类都默认是java.lang包中Object类的子类或间接子类。Object类有一个public 方法toString(),一个对象通过调用该方法可以获得该对象的字符串表示。例子3,10,6字符串与字符、字节数组 (1)字符串与字符数组 我们已经知道String 类的构造方法:String(char)和String(char,int offset,int length)分别用数组a中的全部字符和部分字符创建字符串对象。 String类也提供了将字符串存放到数组中的方法: public v

11、oid getChars(int start,int end, char c, int offset ) 字符串调用getChars方法将当前字符串中的一部分字符复制到参数c指定的数组中,将字符串中从位置start到end-1位置上的字符复制的数组c中,并从数组c的offset处开始存放这些字符。需要注意的是,必须保证数组c能容纳下要被复制的字符。,11,String 类还提供了一个方法: public char toCharArray() 字符串对象调用该方法可以初始化一个字符数组,该数组的长度与字符串的长度相等,并将字符串对象的全部字符复制到该数组中。例子4 (2)字符串与字节数组 Str

12、ing类的构造方法String(byte)用指定的字节数组构造一个字符串对象。String(byte,int offset,int length) 构造方法用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。 public byte getBytes() 方法使用平台默认的字符编码,将当前字符串转化为一个字节数组。例子5,返回,12,6.2 StringBuffer 类,前面我们学习了String字符串对象,String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,那

13、么实体是不可以再发生变化的 在这一节,我们介绍StringBuffer类,该类能创建可修改的字符串序列,也就是说,该类的对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符串。 1StringBuffer类的构造方法 StringBuffer类有三个构造方法: (1)StringBuffer() (2)StringBuffer(int size) (3)StringBuffer(String s),13,使用第1个无参数的构造方法创建一个StringBuffer对象,那么分配给该对象的实体的初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16时,实体的容量自动地增加

14、,以便存放所增加的字符。 StringBuffer对象可以通过length()方法获取实体中存放的字符序列的长度,通过capacity()方法获取当前实体的实际容量。 使用第2个构造方法创建一个StringBuffer对象,那么可以指定分配给该对象的实体的初始容量为参数size 指定的字符个数,当该对象的实体存放的字符序列的长度大于size 个字符时,实体的容量自动地增加,以便存放所增加的字符。 使用第3个构造方法创建一个StringBuffer对象,那么可以指定分配给该对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列的长度大于size 个字符时,实体的

15、容量自动地增加,以便存放所增加的字符。,14,2StringBuffer类的常用方法 (1)append方法 使用StringBuffer类的append方法可以将其它Java类型数据转化为字符串后,再追加到StringBuffer对象中。(p119) (2)char charAt(int n) 得到参数n指定的位置上的单个字符。当前对象实体中的字符串序列的第一个位置为0,第二个位置为1,依次类推。n的值必须是非负的,并且小于当前对象实体中字符串序列的长度。 (3)void setCharAt (int n , char ch) 将当前StringBuffer对象实体中的字符串位置n处的字符用

16、参数ch指定的字符替换。n的值必须是非负的,并且小于当前对象实体中字符串序列的长度。,15,(4)StringBuffer insert(int index, String str) insert方法将一个字符串插入另一个字符串中,并返回当前对象的引用。 (5)public StringBuffer reverse() StringBuffer对象使用reverse()方法将该对象实体中的字符翻转,并返回当前对象的引用。 (6)StringBuffer delete(int startIndex, int endIndex) 从当前StringBuffer对象实体中的字符串中删除一个子字符串,

17、并返回当前对象的引用。这里startIndex指定了需删除的第一个字符的下标,而endIndex指定了需删除的最后一个字符的下一个字符的下标。因此要删除的子字符串从startIndex到endIndex-1。,16,(7)StringBuffer replace( int startIndex ,int endIndex, String str) 将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换。被替换的子字符串由下标startIndex 和endIndex,指定,即从startIndex到endIndex-1的字符串被替换。该方法返回当前String

18、Buffer对象的引用。 例子6,返回,17,6.3 StringTokenizer 类,当我们分析一个字符串并将字符串分解成可被独立使用的单词时,可以使用java.util包中的StringTokenizer类,该类有两个常用的构造方法: 1StringTokenizer(String s) 为字符串s构造一个分析器。使用默认的分隔符集合,即空格符(若干个空格被看做一个空格)、换行符、回车符、Tab符、进纸符。 2StringTokenizer(String s, String delim) 为字符串s构造一个分析器,参数dilim中的字符被作为分隔符。,18,我们把一个StringToke

19、nizer对象称作一个字符串分析器,字符串分析器封装着语言符号和对其进行操作的方法。一个分析器可以使用nextToken()方法逐个获取字符串分析器中的语言符号(单词),每当获取到一个语言符号,字符串分析器中的负责计数的变量的值就自动减一,该计数变量的初始值等于字符串中的单词数目。 字符串分析器调用countTokens()方法可以得到计数变量的值。字符串分析器通常用while循环来逐个获取语言符号,为了控制循环,我们可以使用StringTokenizer类中的hasMoreTokens()方法,只要计数的变量的值大于0,该方法就返回true,否则返回false。 下面是一个应用程序(例子7)

20、,用户从键盘输入一个浮点数,程序输出分别输出该数的整数部分和小数部分,返回,19,6.4 正则表达式与模式匹配,1正则表达式 一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符。比如,“dok”中的d就是有特殊意义的元字符,代表0到9中的任何一个。一个正则表达式也称作一个模式,字符串“9ok”和“1ok”都是和模式:“dok”匹配的字符串之一。和一个模式匹配的字符串称作匹配模式字符串,也称作模式匹配字符串。 2模式匹配 模式匹配就是检索和指定模式匹配的字符串。Java提供了专门用来进行模式匹配的类,这些类在java.util.regex包中。,20,(1)建

21、立模式对象 进行模式匹配的第一步就是使用Pattern类创建一个对象,称作模式对象。Pattern类调用类方法compile(String patter)来完成这一任务,其中的参数patter是一个正则表达式,称作模式对象使用的模式 例如,我们使用正则表达式“Ad”建立一个模式对象p: Pattern p= Ppile(Ad); 如果参数patter指定的正则表达式有错,complie方法将抛出异常:PatternSyntaxException。,21,Pattern类也可以调用类方法compile(String regex, int flags)返回一个Pattern对象,参数flags可以

22、取下列有效值: Pattern .CASE_INSENSITIVE Pattern.MULTILINE Pattern.DOTALL Pattern.UNICODE_CASE Pattern.CANON_EQ 例如,flags取值Pattern .CASE_INSENSITIVE,模式匹配时将忽略大小写。,22,(2)建立匹配对象 模式对象p调用matcher(CharSequence input)方法返回一个Matcher对象m,称作匹配对象,参数input可以是任何一个实现了CharSequence接口的类创建的对象,我们前面学习的String类和StringBuffer类都使用了Char

23、Sequence接口。,23,一个Matcher对象m可以使用下列3个方法寻找参数input指定的字符序列中是否有和模式patter匹配的子序列(patter是创建模式对象p时使用的正则表达式)。 public boolean find() :寻找input和patter匹配的下一子序列 public boolean matches():判断input是否完全和patter匹配。 public boolean lookingAt():判断从input的开始位置是否有和patter匹配的子序列。,24,下列几个方法也是Matcher对象m常用的方法 public boolean find(int

24、 start) 判断input从参数start指定位置开始是否有和patter匹配的子序列,参数start取值0时,该方法和lookingAt()的功能相同。 public String replaceAll(String replacement) Matcher对象m调用该方法可以返回一个字符串对象,该字符串是通过把input中与模式patter匹配的子字符串全部替换为参数replacement指定的字符串得到的(注意,input本身没有发生变化)。 public String replaceFirst(String replacement) Matcher对象m调用该方法可以返回一个字符串对象,该字符串是通过把input中第1个与模式patter匹配的子字符串替换为参数replacement指定的字符串得到的(注意,input本身没有发生变化)。 例子8,返回,25,元字符模式,在正则表达式(模式)中可以使用一对方括号括起若干个字符,代

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论