欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    java中字符串和正则表达式.ppt

    • 资源ID:6509620       资源大小:613KB        全文页数:33页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java中字符串和正则表达式.ppt

    2023/11/7,1,第6章字符串和正则表达式,本章导读String类StringBuffer类StringTokenizer类正则表达式与字符串的替换和分解Scanner类模式匹配,2023/11/7,2,6.1 String类,Java使用java.lang包中的String类来创建一个字符串变量,因此字符串变量是类类型变量,是一个对象。,2023/11/7,3,1.创建字符串对象,使用String类的构造方法创建字符串对象,例如:String s;s=new String(we are students);声明和创建可用一步完成:String s=new String(we are students);也可以用一个已创建的字符串创建另一个字符串,如:String tom=String(s);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中提取字符的起始位置和从该位置开始截取的字符个数,如 char a=s,t,b,u,s,n;String s=new String(a,2,3);,2023/11/7,4,2引用字符串常量对象,字符串常量是对象,因此可以把字符串常量的引用赋值给一个字符串变量,如string s1,s2;s1=How are you;s2=How are you;这样,s1和s2具有相同的引用,因而具有相同的实体。s1和s2的内存示意如图6.1所示。,2023/11/7,5,3.String 类的常用方法(1),(1)public int length()获取一个字符串的长度 String s=we are students,tom=我们是学生;int n1,n2;n1=s.length();n2=tom.length();那么,n1的值是15,n2的值是5。字符串常量也可调用length()获得自身长度,如你的爱好.length()的值是4。(2)public boolean equals(String s)比较当前字符串对象的实体是否与参数指定的字符串s的实体相同.String tom=new String(we are students);String jerry=new String(we are students);tom.equals(jerry)的值是true(tom=jerry的值是false)。内存示意如图6.2 相近的方法:public boolean equalsIgnoreCase(String s)(3)public boolean contains(String s)断当前字符串对象是否含有参数指定的字符串s 例6-1说明了方法equals()和contains()的用法(效果如图6.3所示)。,2023/11/7,6,内存示意如图6.2,2023/11/7,7,3.String 类的常用方法(2),(4)public boolean startsWith(String s)、public boolean endsWith(String s)判断当前字符串对象的前缀、后缀是否是参数指定的字符串s,如 tom.startsWith(220)的值是true,jerry.startsWith(220)的值是false。tom.endsWith(021)的值是true,jerry.endsWith(021)的值是false。(5)public int compareTo(String s)按字典序与参数s指定的字符串比较大小。如 String str=abcde;pareTo(boy)小于0,pareTo(aba)大于0,pareTo(abcde)等于0。相近的方法:public int compareToIgnoreCase(String s)该方法忽略大小写,2023/11/7,8,3.String 类的常用方法(3),(6)public int indexOf(String s)从当前字符串的头开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。indexOf(String s,int startpoint)从当前字符串的startpoint位置处开始检索字符串s,并返回首次出现s的位置。如果没有检索到字符串s,该方法返回的值是-1。lastIndexOf(String s)从当前字符串的头开始检索字符串s,并返回最后出现s的位置.如果没有检索到字符串s,该方法返回的值是-1。如String tom=I am a good cat;tom.indexOf(a);/值是2tom.indexOf(good,2);/值是7tom.indexOf(a,7);/值是13 tom.indexOf(w,2);/值是-1(7)public String substring(int startpoint)获得一个当前字符串的子串,该子串是从当前字符串的startpoint处截取到最后所得到的字符串。substring(int start,int end)获得一个当前字符串的子串,该子串是从当前字符串的start处截取到end处所得到的字符串,但不包括end处所对应的字符。如 String tom=I love tom;String s=tom.substring(2,5);则s为“lov”。(8)public String trim()字符串对象s调用该方法得到一个字符串对象,该字符串对象是s去掉前后空格后的字符串。,2023/11/7,9,4.字符串与基本数据的相互转化,java.lang包中的Integer类调用其类方法:public static 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 parseDouble(String s)public static double parseDouble(String s)可以将“数字”格式的字符串,转化为相应的基本数据类型。使用Long类中的下列类方法可得到整数的各种进制的字符串表示:public static String toBinaryString(long i)public static String toOctalString(long i)public static String toHexString(long i)public static String toString(long i,int p)其中的toString(long i,int p)返回整数i的p进制表示 例6-2 求若干个数的平均数,若干个数从键盘输入(效果如图6.4所示)。,2023/11/7,10,例子6-2 效果图,有时,我们需要将数字转化为字符串,可以使用String 类的下列类方法:public String valueOf(byte n)public String valueOf(int n)public String valueOf(long n)public String valueOf(float n)public String valueOf(double n)形如123、1232.98的数值转化为字符串,如String str=String.valueOf(12313.9876);float x=123.987f;String temp=String.valueOf(x);,2023/11/7,11,5对象的字符串表示,所有的类都默认是java.lang包中Object类的子类或间接子类。Object类有一个public方法public String toString(),一个对象通过调用该方法可以获得该对象的字符串表示。一个类可以通过重写public String toString()方法,以便获得该类对象想要的字符串表示,比如java.util包中的Date类就重写了public String toString(),使得Date对象调用toString()得到的字符串是由日期信息组成的字符序列。如果一个类没有重写public String toString()方法,那么该类所创建的对象调用toString()方法得到的字符串格式为:类名对象的引用 例6-3中的Student类重写了toString()方法、TV类没有重写toString()方法.,2023/11/7,12,6字符串与字符数组、字节数组,(1)字符串与字符数组 类的构造方法String(char)和String(char,int offset,int length)分别用数组a中的全部字符和部分字符创建字符串对象。String类也提供了将字符串存放到数组中的方法:public void getChars(int start,int end,char c,int offset)字符串调用getChars()方法将当前字符串中的一部分字符复制到参数c指定的数组中,将字符串中从位置start到end-1位置上的字符复制的数组c中,并从数组c的offset处开始存放这些字符。String类还提供了一个方法 public char toCharArray()字符串对象调用该方法可以初始化一个字符数组,该数组的长度与字符串的长度相等,并将字符串对象的全部字符复制到该数组中。例6-4将用户在键盘输入的字符串加密,然后输出密文,见效果图。(2)字符串与字节数组 String类的构造方法String(byte)用指定的字节数组构造一个字符串对象。构造方法String(byte,int offset,int length)用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。方法public byte getBytes()使用平台默认的字符编码,将当前字符串转化为一个字节数组。例6-5使用了字节数组,见效果图。,2023/11/7,13,例子6-4,例子6-5效果图,例子6-5效果图,例子6-4效果图,2023/11/7,14,6.2 StringBuffer 类,前面我们学习了String字符串对象,String类创建的字符串对象是不可修改的。也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,实体是不可以再发生变化的(如图6.5所示).本节将介绍StringBuffer类,该类能创建可修改的字符串序列,即该类的对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符串。一个StringBuffer对象调用append()方法可以追加字符串序列,如 StringBuffer s=new StringBuffer(I love this game);s.append(ok);对象s调用append()追加一个字符串序列,如图6.6所示。,2023/11/7,15,1StringBuffer类的构造方法,StringBuffer类有3个构造方法:StringBuffer(),StringBuffer(int size)和StringBuffer(String s)。构造方法StringBuffer()创建一个StringBuffer对象,分配给该对象的实体的初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16时,实体的容量自动增加,以便存放所增加的字符。StringBuffer对象可以通过方法length()获取实体中存放的字符序列的长度,通过方法capacity()获取当前实体的实际容量。构造方法StringBuffer(int size)创建一个StringBuffer对象,可以指定分配给该对象的实体的初始容量为参数size 指定的字符个数。当该对象的实体存放的字符序列的长度大于size 个字符时,实体的容量自动增加,以便存放所增加的字符。构造方法StringBuffer(String s)创建一个StringBuffer对象,可以指定分配给该对象的实体的初始容量为参数字符串s的长度额外再加16个字符。,2023/11/7,16,2StringBuffer类的常用方法,append()将其他Java类型数据转化为字符串后,再追加到StringBuffer对象中。char charAt(int n)得到参数n指定的置上的单个字符。注:当前对象实体中的字符串序列的第一个位置为0,第二个位置为1,以此类推。n的值必须是非负的,并且小于当前对象实体中字符串序列的长度。void setCharAt(int n,char ch)将当前StringBuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换。StringBuffer insert(int index,String str)将一个字符串插入另一个字符串中,并返回当前对象的引用。public StringBuffer reverse()将对象实体中的字符翻转,并返回当前对象的引用。StringBuffer delete(int startIndex,int endIndex)从当前StringBuffer对象实体中的字符串中删除一个子字符串,并返回当前对象的引用。这里,startIndex指定了需删除的第一个字符的下标,而endIndex指定了需删除的最后一个字符的下一个字符的下标。StringBuffer replace(int startIndex,int endIndex,String str)将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换。被替换的子字符串由下标startIndex和endIndex指定,即从startIndex到endIndex-1的字符串被替换。该方法返回当前StringBuffer对象的应用。【例6-6】,2023/11/7,17,6.3 StringTokenizer 类,分析一个字符串并将字符串分解成可被独立使用的单词时,可以使用java.util包中的StringTokenizer类,该类有两个常用的构造方法:StringTokenizer(String s)为字符串s构造一个分析器,使用默认的分隔标记,即空格符(若干个空格被看成一个空格)、换行符、回车符、Tab符等。StringTokenizer(String s,String delim)为字符串s构造一个分析器,参数dilim中的字符的任意排列组合都是分隔标记,如 StringTokenizer fenxi=new StringTokenizer(We,are;student,;);把一个StringTokenizer对象称为一个字符串分析器,字符串分析器封装着语言符号和对其进行操作的方法。一个分析器可以使用nextToken()方法逐个获取字符串分析器中的语言符号(单词),每获取到一个语言符号,字符串分析器中的负责计数的变量的值就自动减一,该计数变量的初始值等于字符串中的单词数目,字符串分析器调用countTokens()方法可以得到计数变量的值。字符串分析器通常用while循环来逐个获取语言符号,为了控制循环,我们可以使用StringTokenizer类中的hasMoreTokens()方法,只要计数的变量的值大于0,该方法就返回true,否则返回false。【例6-7】是一个应用程序,用户从键盘输入一个浮点数,程序分别输出该数的整数部分和小数部分(效果如图6.7所示)。,2023/11/7,18,例子6-7效果图,2023/11/7,19,6.4 正则表达式与模式匹配,1正则表达式 一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符。例如,“dcat”中的d就是有特殊意义的元字符,代表0到9中的任何一个。字符串0cat,1cat,2cat9cat都是和正则表达式dcat匹配字符串。字符串对象调用 public boolean matches(String regex)方法可以判断当前字符串对象是否和参数regex指定的正则表达式匹配。表6.1列出了常用的元字符及其意义。Page114 表6.2给出了常用的限定修饰符的用法。Page115【例6-8】程序判断用户从键盘输入的字符序列是否全部由英文字母所组成。效果如图6.8所示.,2023/11/7,20,表6.1,2023/11/7,21,表6.2,2023/11/7,22,2字符串的替换,JDK1.4之后,字符串对象调用:public String replaceAll(String regex,String replacement)方法返回一个字符串,该字符串是当前字符串中所有和参数regex指定的正则表达式匹配的子字符串被参数replacement指定的字符串替换后的字符串,例如:String result=12hello567.replaceAll(a-zA-Z+,你好);那么result就是:12你好567。注:当前字符串调用replaceAll()方法返回一个字符串,但不改变当前字符串。例6-9中,字符串调用replaceAll()方法剔除字符串中的网站链接地址(将网站链接地址替换为不含任何字符的字符串,即替换为),运行效果如图6.9.,2023/11/7,23,3字符串的分解,JDK1.4之后,String 类提供了一个实用的方法:public String split(String regex)字符串调用该方法时,使用参数指定的正则表达式regex做为分隔标记分解出其中的单词,并将分解出的单词存放在字符串数组中。例如,对于字符串:str=1945年08月15日是抗日战争胜利纪念日!;如果准备分解出全部由数字字符组成的单词,就必须用非数字字符串作为分隔标记,因此,可以使用正则表达式:String regex=D+;作为分隔标记分解出str中的单词:String digitWord=str.split(regex);那么,digitWord0、digitWord1和digitWord2就分别是1945、08和15。下面的例6-10中,用户从键盘输入一行文本,程序输出其中的单词,效果如图6.10.,2023/11/7,24,6.5 Scanner类,Scanner类不仅可以创建出用于读取用户从键盘输入的数据的对象,而且也可以创建出用于解析字符串的对象。当需要Scanner类的对象解析字符串str时,可以如下构造一个Scanner类的对象scanner:Scanner scanner=new Scanner(str);,2023/11/7,25,1使用默认分隔标记解析字符串,创建Scanner对象,并将要解析的字符串传递给所构造的对象,例如,对于字符串:String NBA=I Love This Game;为了解析出NBA中的单词,可以构造一个Scanner对象:Scanner scanner=new Scanner(NBA);那么scanner将空白作为分隔标记,调用next()方法依次返回NBA中的单词,如果NBA最后一个单词已被next()方法返回,scanner调用hasNext()将返回false,否则返回true。对于数字型的单词,如618,168.98等可以用nextInt()或nextDouble()方法来代替next()方法,即scanner可以调用nextInt()或nextDouble()方法将数字型单词转化为int型或double型数据返回.注意,如果单词不是数字型单词,调用nextInt()或nextDouble()方法将发生InputMismatchException异常,在处理异常时可以调用next()方法返回该非数字化单词。例6-11中,使用Scanner对象解析出字符串TV cost 876 dollar,Computer cost 2398 dollar 中的全部价格数字(价格数字的前后需有空格),并计算了总消费。程序运行效果如图6.11所示。,2023/11/7,26,例子6-11效果图,2023/11/7,27,2使用正则表达式作为分隔标记解析字符串,Scanner对象可以调用 useDelimiter(正则表达式);方法将一个正则表达式作为分隔标记,即和正则表达式匹配的字符串都是分隔标记。例6-12使用正则表达式(匹配所有非数字字符串):String regex=0123456789.+;作为分隔标记解析字符串市话费:176.89元,长途费:187.98元,网络费:928.66元中的全部价格数字,并计算了总的通信费用。程序运行效果如图6.12。对于上述例6-12中提到的字符串,如果用非数字字符串作分隔标记,那么所有的价格数字就是单词。,2023/11/7,28,6.6 模式匹配,模式匹配就是检索和指定模式匹配的字符串。Java提供了专门用来进行模式匹配的Pattern类和Match类,这些类在包中。以下结合具体问题来讲解使用Pattern类和Match类的步骤。假设有字符串:String input=Have 7 monkeys on the tree,walk 2 monkeys,still leave how many monkeys?我们想知道input从哪个位置开始至哪个位置结束曾出现了字符串monkeys。使用Pattern类和Match类检索字符串str中的子字符串的步骤如下:,2023/11/7,29,1模式对象,使用正则表达式regex做参数得到一个称为模式的Pattern类的实例pattern:Pattern pattern=Ppile(regex);例如:String regex=monkeys;pattern=Ppile(regex);模式对象是对正则表达式的封装。如果参数regex指定的正则表达式有错,complie方法将抛出异常:PatternSyntaxException。Pattern类也可以调用类方法compile(String regex,int flags)返回一个Pattern对象,参数flags可以取下列有效值:Pattern.CASE_INSENSITIVEPattern.MULTILINEPattern.DOTALLPattern.UNICODE_CASEPattern.CANON_EQ 例如,flags取值Pattern.CASE_INSENSITIVE,模式匹配时将忽略大小写。,2023/11/7,30,2.匹配对象,得到可以检索字符串input的Matcher类的实例matcher(称为匹配对象):Matcher matcher=pattern.matcher(input);模式对象pattern调用matcher(CharSequence input)方法返回一个Matcher对象matcher,称为匹配对象,参数input用于给出matcher要检索的字符串参数input可以是任何一个实现了CharSequence接口的类创建的对象。Matcher对象matcher可以使用下列方法寻找字符串input中是否有和模式regex匹配的子序列。*public boolean find():寻找input和regex匹配的下一子序列,如果成功该方法返回true,否则返回false。*public boolean matches():判断input是否完全和regex匹配。*public boolean lookingAt():判断从input的开始位置是否有和regex匹配的子序列。*public boolean find(int start)判断input从参数start指定位置开始是否有和regex匹配的子序列,参数start取值0时,该方法和lookingAt()的功能相同。*public String replaceAll(String replacement)返回一个字符串,该字符串是通过把input中与模式regex匹配的子字符串全部替换为参数replacement指定的字符串得到的。*public String replaceFirst(String replacement)返回一个字符串,该字符串是通过把input中第1个与模式regex匹配的子字符串替换为参数replacement指定的字符串得到的。例6-13查找一个字符串中全部的单词monkeys以及该单词的在字符串中的位置(位置索引从0开始)。程序运行效果如图6.13。例6-14使用模式匹配查找一个字符串中的网址,然后将网址串全部剔除得到一个新字符串,运行效果如图6.14。,2023/11/7,31,例子6-13,例子6-14效果图,2023/11/7,32,3.模式的逻辑或,模式可以使用位运算符“|”进行逻辑“或”运算得到一个新模式。例如,pattern1和pattern2是两个模式,即两个正则表达式。那么,pattern=pattern1|pattern2就是两个模式的“或”。一个字符串如果匹配模式pattren1或匹配模式pattern2,那么就匹配模式pattern。例6-15模式的逻辑或.上述程序的运行结果如下:从0到7匹配模式子序列:loveyou从7到13匹配模式子序列:hateme从13到20匹配模式子序列:love123从23到29匹配模式子序列:hate99 从30到37匹配模式子序列:love888,2023/11/7,33,

    注意事项

    本文(java中字符串和正则表达式.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开