第6章字符串和正则表达式_第1页
第6章字符串和正则表达式_第2页
第6章字符串和正则表达式_第3页
第6章字符串和正则表达式_第4页
第6章字符串和正则表达式_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6章字符串和正则表达式章字符串和正则表达式 本章导读本章导读1. String类2. StringBuffer类3. StringTokenizer类4. 正则表达式与模式匹配5元字符模式6限定符模式7模式的逻辑或6.1 String类类 JavaJava使用使用java.langjava.lang包中的包中的StringString类来创建一个字符串类来创建一个字符串变量,因此字符串变量是类类型变量,是一个对象。变量,因此字符串变量是类类型变量,是一个对象。 1 1字符串常量字符串常量 如 :你好、1234.987、weqweo。 2 2创建字符串对象创建字符串对象 使用String类的

2、构造方法创建字符串对象: 例如: String s;String s; s=new String(we are students) s=new String(we are students); 也可以用一个已创建的字符串创建另一个字符串,如: String tom=new String(s);String tom=new String(s); StringString类还有两个较常用构造方法:类还有两个较常用构造方法: (1 1)String (char a)String (char a):用一个字符数组:用一个字符数组a a 创建一个字符创建一个字符串对象,如:串对象,如: char a=b

3、,o,y;char a=b,o,y; String s=new String(a); String s=new String(a); (2 2)String(char a,int startIndex,int count)String(char a,int startIndex,int count):提取:提取字符数组字符数组a a 中的一部分字符创建一个字符串对象中的一部分字符创建一个字符串对象,参数startIndex和count分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数,例如: char a=s,t,b,u,s,n;char a=s,t,b,u,s,n; String

4、s=new String(a,2,3); String s=new String(a,2,3); 3 3String String 类的常用方法类的常用方法 (1 1)public int length()public int length() 使用使用String String 类中的类中的length()length()方法可以方法可以获取一个字符串的长度获取一个字符串的长度 (2 2)public boolean equals(String s)public boolean equals(String s) 字符串对象调用字符串对象调用StringString类中的类中的equalseq

5、uals方法,比较当前字符串对象的实体是否方法,比较当前字符串对象的实体是否与参数指定的字符串与参数指定的字符串s s的实体相同的实体相同 class StringString()String(String s). String(char a ). String(char a,int startIndex,int count).public int length() int n; .return n; public boolean equals(String s) boolean b; . return b; .public class Example public static void m

6、ain(String args ) String x=new String(skldjflkdfkl); int y; y=x.length(); System.out.println(字符串+x+的长度为:+y); (3 3)public boolean startsWith(String s)public boolean startsWith(String s)、public public boolean endsWith(String s)boolean endsWith(String s)方法方法 字符串对象调用字符串对象调用startsWith(String s)startsWith

7、(String s)方法,判断当前字方法,判断当前字符串对象的前缀是否是参数指定的字符串符串对象的前缀是否是参数指定的字符串s s public class Example public static void main(String args ) String x=new String(skldjflkdfkl); String y=new String(skldjf1kdfkl); if(x.equals(y) System.out.println(字符串字符串+x+和字符串和字符串+y+相同。相同。); else System.out.println(字符串字符串+x+和字符串和字符串+

8、y+不相同。不相同。); (4 4)public int compareTopublic int compareTo(String sString s)方法)方法 字符串对象可以使用字符串对象可以使用StringString类中的类中的compareTocompareTo(String sString s)方)方法,按字典序与参数法,按字典序与参数s s指定的字符串比较大小。如果当前字符串指定的字符串比较大小。如果当前字符串与与s s相同,该方法返回值相同,该方法返回值0 0;如果当前字符串对象大于;如果当前字符串对象大于s s,该方法,该方法返回正值;如果小于返回正值;如果小于s s,该方法

9、返回负值。,该方法返回负值。(5 5)public int indexOf (String s)public int indexOf (String s) 字符串调用方法字符串调用方法indexOf (String s)indexOf (String s)从当前字符串的头开始检从当前字符串的头开始检索字符串索字符串s s,并返回首次出现,并返回首次出现s s的位置。如果没有检索到字符串的位置。如果没有检索到字符串s s,该方法返回的值是该方法返回的值是-1-1。如果没有检索到字符串。如果没有检索到字符串s s,该方法返回的,该方法返回的值是值是-1-1。字符串调用。字符串调用lastIndex

10、Of (String s)lastIndexOf (String s)方法从当前字符串方法从当前字符串的头开始检索字符串的头开始检索字符串s s,并返回最后出现,并返回最后出现s s的位置。如果没有检索的位置。如果没有检索到字符串到字符串s s,该方法返回的值是,该方法返回的值是-1-1。 (6 6)public String substring(int startpoint)public String substring(int startpoint) 字符串对象调用该方法获得一个当前字符串的子串,该子字符串对象调用该方法获得一个当前字符串的子串,该子串是从当前字符串的串是从当前字符串的st

11、artpointstartpoint处截取到最后所得到的字符处截取到最后所得到的字符串。字符串对象调用串。字符串对象调用substring(int start ,int end)substring(int start ,int end)方法方法获得一个当前字符串的子串,该子串是从当前字符串的获得一个当前字符串的子串,该子串是从当前字符串的startstart处截取到处截取到endend处所得到的字符串,但不包括处所得到的字符串,但不包括endend处所对处所对应的字符。应的字符。 (7 7)public String replaceAll(String old ,String public S

12、tring replaceAll(String old ,String new)new) 字符串对象字符串对象s s调用该方法可以获得一个串对象,这个串对象调用该方法可以获得一个串对象,这个串对象是通过用参数是通过用参数newnew指定的字符串替换指定的字符串替换s s中由中由oldold指定的所有字指定的所有字符串而得到的字符串。符串而得到的字符串。 (8 8)public String trim()public String trim() 一个字符串一个字符串s s通过调用方法通过调用方法trim()trim()得到一个字符串对象,该得到一个字符串对象,该字符串对象是字符串对象是s s去掉

13、前后空格后的字符串。去掉前后空格后的字符串。public class Example public static void main(String args ) String x=new String( abcdabefg); String a=new String(); String b=new String(); String c=new String(); String d=new String(); a=x.substring(3,5); b=x.substring(6); c=x.replaceAll(ab,xy); d=x.trim(); System.out.println(字符

14、串字符串a的值:的值:+a); System.out.println(字符串字符串b的值:的值:+b); System.out.println(字符串字符串c的值:的值:+c); System.out.println(字符串字符串d的值:的值:+d); 5 5字符串与基本数据的相互转化字符串与基本数据的相互转化 java.lang包中的Integer类调用其类方法: public static int parseInt(String s)public static int parseInt(String s) 可以将“数字”格式的字符串,如“12387”,转化为int型数据。 类似地,使用ja

15、va.lang包中的Byte、Short、Long、Float、Double类调相应的类方法: public static byte parseByte(String s)public static byte parseByte(String s) public static short parseShort(String s)public static short parseShort(String s) public static long parseLong(String s)public static long parseLong(String s) public static dou

16、ble parseDouble(String s)public static double parseDouble(String s) 可以将“数字”格式的字符串,转化为相应的基本数据类型。 有时,我们需要将数字转化为字符串,可以使用String 类的下列类方法: public String valueOfpublic String valueOf(byte nbyte n) public String valueOfpublic String valueOf(int nint n) public String valueOfpublic String valueOf(long nlong n

17、) public String valueOfpublic String valueOf(float nfloat n) public String valueOf public String valueOf(double ndouble n) 6 6对象的字符串表示对象的字符串表示 在子类中我们讲过,所有的类都默认是java.lang包中Object类的子类或间接子类。Object类有一个public 方法toString(),一个对象通过调用该方法可以获得该对象的字符串表示。import java.util.*;public class Example public static void

18、 main(String args ) Scanner reader=new Scanner(System.in); System.out.print(请输入一串数字:请输入一串数字:); int n=reader.nextInt(); String s=new String(); s=String.valueOf(n); int m=0; for(int i=0;is.length();i+) m+=Integer.parseInt(s.substring(i,i+1); System.out.println(各位数字的和是:各位数字的和是:+m); 7 7字符串与字符数组字符串与字符数组我

19、们已经知道String 类的构造方法:String(char)和String(char,int offset,int length)分别用数组a中的全部字符和部分字符创建字符串对象。StringString类也提供了将字符串类也提供了将字符串存放到数组中的方法:存放到数组中的方法:(1 1) public void getChars public void getChars( (int start,int end,char c,int offset int start,int end,char c,int offset ) ) 字符串调用getChars方法将当前字符串中的一部分字符复制到参数

20、c指定的数组中,将字符串中从位置start到end-1位置上的字符复制的数组c中,并从数组c的offset处开始存放这些字符。需要注意的是,必须保证数组c能容纳下要被复制的字符。public class Examplepublic static void main(String args)String s1=we are students;char c=new char20;s1.getChars(7,15,c,0 );for(int i=0;i8;i+)System.out.print(ci);System.out.println(); (2 2) public char toCharArr

21、ay() public char toCharArray() 字符串对象调用该方法可以初始化一个字符数组,该数组的长度与字符串的长度相等,并将字符串对象的全部字符复制到该数组中。public class Examplepublic static void main(String args)String s1= we are students;char c=new char20;c=s1.toCharArray() ;for(int i=0;is1.length();i+)System.out.print(ci);System.out.println(); 6.2 StringBuffer 类类

22、 前面我们学习了String字符串对象,String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,那么实体是不可以再发生变化的在这一节,我们介绍StringBufferStringBuffer类,该类能创建该类能创建可修改的字符串序列,也就是说,该类的对象的实体的内可修改的字符串序列,也就是说,该类的对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符串存空间可以自动的改变大小,便于存放一个可变的字符串。6.2 StringBuffer 类类 1StringBufferStringBuffer类的构造方

23、法类的构造方法 StringBuffer类有三个构造方法: (1)StringBuffer( )StringBuffer( ) (2)StringBuffer(int size)StringBuffer(int size) (3)StringBuffer(String s)StringBuffer(String s)2StringBufferStringBuffer类的常用法类的常用法 (1)apend( String str ) apend( String str ) (2)char charAt(int n)char charAt(int n) (3)void setCharAt(int

24、n,char ch)void setCharAt(int n,char ch) (4)StringBuffer insert(int index, String str)StringBuffer insert(int index, String str) (5)public StringBuffer reverse( )public StringBuffer reverse( ) (6)StringBuffer delete(int startIndex,int endIndex)StringBuffer delete(int startIndex,int endIndex) (7)Strin

25、gBuffer replace( int startIndex, int endIndex,String str )StringBuffer replace( int startIndex, int endIndex,String str )public class Examplepublic static void main(String args)StringBuffer str=new StringBuffer(a1b2c3d4);System.out.println(str);str.append(e5f6);System.out.println(str);char c=str.cha

26、rAt(2);System.out.println(c);str.setCharAt(2,B);System.out.println(str);str.insert(3,RRRRR);System.out.println(str);str.replace(3,8,ZZZZZ);System.out.println(str);str.delete(3,8);System.out.println(str);str.reverse();System.out.println(str); 6.3 StringTokenizer 类类 当我们分析一个字符串并将字符串分解字符串分解成可被独立使用的单词单词时

27、,可以使用java.util包中的StringTokenizer类,该类有两个常用的构造方法: 1StringTokenizer(String s) 为字符串s构造一个分析器。使用默认的分隔符集合,即空格符(若干个空格被看做一个空格)、换行符、回车符、Tab符、进纸符。 2StringTokenizer(String s, String delim) 为字符串s构造一个分析器,参数dilim中的字符被作为分隔符。6.3 StringTokenizer 类类boolean hasMoreTokens()返回是否还有分隔符。String nextToken()返回从当前位置到下一个分隔符的字符串i

28、nt countTokens()返回nextToken方法被调用的次数。import java.util.*;public class Example public static void main (String args ) Scanner reader=new Scanner(System.in); String x=reader.nextLine(); StringTokenizer fenxi=new StringTokenizer(x); for(int i=0;fenxi.hasMoreTokens();i+) String str=fenxi.nextToken(); Syst

29、em.out.println(str); import java.util.*;public class Example public static void main (String args ) Scanner reader=new Scanner(System.in); String x=reader.nextLine(); StringTokenizer fenxi=new StringTokenizer(x); System.out.println(该句共有该句共有+fenxi.countTokens()+个单词,它们分别是:个单词,它们分别是:); for(int i=0;fenx

30、i.hasMoreTokens();i+) String str=fenxi.nextToken(); System.out.println(str); import java.util.*;public class Example public static void main (String args ) String mess=整数部分,小数部分; Scanner reader=new Scanner(System.in); double x=reader.nextDouble(); String s=String.valueOf(x); StringTokenizer fenxi=ne

31、w StringTokenizer(s,.); for(int i=0;fenxi.hasMoreTokens();i+) String str=fenxi.nextToken(); System.out.println(messi+:+str); 在在java中有中有3个类来负责字符的操作。个类来负责字符的操作。 1.Character 是进行单个字符操作的是进行单个字符操作的 2.String 对一串字符进行操作。不可变类。对一串字符进行操作。不可变类。 3.StringBuffer 也是对一串字符进行操作,但是可变类。也是对一串字符进行操作,但是可变类。 String: 是对象不是原始类

32、型是对象不是原始类型. 为不可变对象为不可变对象,一旦被创建一旦被创建,就不能修改它的值就不能修改它的值. 对于已经存在的对于已经存在的String对象的修改都是重新创建一个新的对象对象的修改都是重新创建一个新的对象,然后把新的值保存进去然后把新的值保存进去. String 是是final类类,即不能被继承即不能被继承. StringBuffer: 是一个可变对象是一个可变对象,当对他进行修改的时候不会像当对他进行修改的时候不会像String那样重新建立对象那样重新建立对象 它只能通过构造函数来建立它只能通过构造函数来建立, StringBuffer sb = new StringBuffer

33、(); note:不能通过付值符号对他进行付值不能通过付值符号对他进行付值. sb = welcome to here!;/error 对象被建立以后对象被建立以后,在内存中就会分配内存空间在内存中就会分配内存空间,并初始保存一个并初始保存一个null.向向StringBuffer 中付值的时候可以通过它的中付值的时候可以通过它的append方法方法. sb.append(hello); 字符串连接操作中字符串连接操作中StringBuffer的效率要比的效率要比String高高: String str = new String(welcome to ); str += here; 的处理步骤

34、实际上是通过建立一个的处理步骤实际上是通过建立一个StringBuffer,然后调用然后调用append(),最后最后 再将再将StringBuffer toSting(); 这样的话这样的话String的连接操作就比的连接操作就比StringBuffer多出了一些附加操作多出了一些附加操作,当然效率上要打折扣当然效率上要打折扣. 并且由于并且由于String 对象是不可变对象对象是不可变对象,每次操作每次操作Sting 都会重新建立新的对象来保存新的值都会重新建立新的对象来保存新的值. 这样原来的对象就没用了这样原来的对象就没用了,就要被垃圾回收就要被垃圾回收.这也是要影响性能的这也是要影响

35、性能的.import java.util.regex.*;class Examplepublic static void main(String args) String s1=0A1A2A3A4A5A6A7A8A9A; String s2=5A6; String s3=5AA6; if(s1.contains(s2) System.out.println(字符串字符串+s1+中包含字符串中包含字符串+s2); else System.out.println(字符串字符串+s1+中不包含字符串中不包含字符串+s2); if(s1.contains(s3) System.out.println(

36、字符串字符串+s1+中包含字符串中包含字符串+s3); else System.out.println(字符串字符串+s1+中不包含字符串中不包含字符串+s3);import java.util.regex.*;class Examplepublic static void main(String args) String s1=0A1A2A3A4A5A6A7A8A9A; String s2=5A6; String s3=5AA6; f(s1,s2); f(s1,s3);public static void f(String s1,String s2)if(s1.contains(s2) Sy

37、stem.out.println(字符串字符串+s1+中包含字符串中包含字符串+s2); else System.out.println(字符串字符串+s1+中不包含字符串中不包含字符串+s2);6.4 正则表达式与模式匹配正则表达式与模式匹配 1 1正则表达式(模式)正则表达式(模式) 一个正则表达式是含有一些具有特殊意义字符的字符串,一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符。这些特殊字符称作正则表达式中的元字符。比如,“dok”中的d就是有特殊意义的元字符,代表0到9中的任何一个。一个一个正则表达式正则表达式也称作一个也称作一个模式模式,字符串

38、“9ok”和“1ok”都是和模式:“dok”匹配的字符串之一。和一个模式匹配的字符串称作匹配模式字符串匹配模式字符串,也称作模式匹配字符串模式匹配字符串。 2 2模式匹配模式匹配 模式匹配就是检索和指定模式匹配的字符串。模式匹配就是检索和指定模式匹配的字符串。Java提供了专门用来进行模式匹配的类,这些类在java.util.regexjava.util.regex包中。(1 1)建立模式对象建立模式对象 进行模式匹配的第一步就是使用进行模式匹配的第一步就是使用PatternPattern类创建一个对类创建一个对象,称作模式对象象,称作模式对象。PatternPattern类调用类方法类调用类

39、方法compilecompile(String patterString patter)来完成这一任务)来完成这一任务,其中的参数patter是一个正则表达式,称作模式对象使用的模式 例如,我们使用正则表达式“Ad”Ad”建立一个模式对象p: Pattern p= Ppile(Pattern p= Ppile(AdAd);); 如果参数如果参数patterpatter指定的正则表达式有错,指定的正则表达式有错,compliecomplie方法将方法将抛出异常:抛出异常:PatternSyntaxExceptionPatternSyntaxException。模式匹配分两步实现:模式匹配分两步实

40、现:PatternPattern类也可以调用类方法类也可以调用类方法compile(String regex, int compile(String regex, int flags)flags)返回一个返回一个PatternPattern对象,参数对象,参数flagsflags可以取下列有效值:可以取下列有效值:Pattern .CASE_INSENSITIVE-Pattern .CASE_INSENSITIVE-模式匹配时将忽略大小写模式匹配时将忽略大小写。Pattern.MULTILINE-Pattern.MULTILINE-在这种模式下,在这种模式下,和和$分别匹配一分别匹配一行的行的

41、开始和结束开始和结束。Pattern.DOTALL-Pattern.DOTALL-在这种模式下,表达式在这种模式下,表达式.可以匹配任意可以匹配任意字符,包括表示一行的结束符。字符,包括表示一行的结束符。Pattern.UNICODE_CASE-Pattern.UNICODE_CASE-在这个模式下,如果你还启用了在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对标志,那么它会对Unicode字符进行大字符进行大小写不敏感的匹配。默认情况下,大小写不敏感的匹配只适用小写不敏感的匹配。默认情况下,大小写不敏感的匹配只适用于于US-ASCII字符集。字符集。Pattern

42、.CANON_EQ -Pattern.CANON_EQ -当且仅当当且仅当两个字符的两个字符的正规分解正规分解(canonical decomposition)都完全相同的情况下,才认定匹都完全相同的情况下,才认定匹配。配。 (2 2)建立匹配对象建立匹配对象模式对象模式对象p p调用调用matchermatcher( (CharSequence inputCharSequence input) )方法返回一方法返回一个个MatcherMatcher对象对象m m,称作,称作匹配对象匹配对象,参数,参数inputinput可以是任何一个可以是任何一个实现了实现了CharSequenceChar

43、Sequence接口的类创建的对象,我们前面学习的接口的类创建的对象,我们前面学习的StringString类和类和StringBufferStringBuffer类都使用了类都使用了CharSequenceCharSequence接口。接口。例:例: Matcher m= p.matcher(s);一个一个MatcherMatcher对象对象m m可以使用下列可以使用下列3 3个方法寻找参数个方法寻找参数inputinput指指定的字符序列中是否有和模式定的字符序列中是否有和模式patterpatter匹配的子序列(匹配的子序列(patterpatter是是创建模式对象创建模式对象p p时使

44、用的正则表达式)。时使用的正则表达式)。npublic boolean find() public boolean find() :寻找寻找inputinput和和patterpatter匹配的下一子序匹配的下一子序列列,如果成功该方法返回true,否则返回false。m m首次调用该方首次调用该方法时,寻找法时,寻找inputinput中第中第1 1个和个和patterpatter匹配的子序列匹配的子序列,如果 find()返回true,m m再调用再调用find()find()方法将从上一次匹配模式成功的子序方法将从上一次匹配模式成功的子序列后开始寻找下一个匹配模式的子字符串列后开始寻找下

45、一个匹配模式的子字符串。若find方法返回true,m调用start()方法和end方法可以得到该匹配模式子序列在input中的开始位置和结束位置。若find方法返回true,m调用group()返回一个匹配模式的字符串对象。MatcherMatcher对象常用方法:对象常用方法:npublic boolean matches()public boolean matches():判断判断inputinput是否完全和是否完全和patterpatter匹配。匹配。npublic boolean lookingAt()public boolean lookingAt():判断从判断从inputin

46、put的开始位的开始位置是否有和置是否有和patterpatter匹配的子序列。匹配的子序列。若lookingAt()方法返回true,m调用start()方法和end()方法可以得到lookingAt()方法找到的匹配模式子序列在input中的开始位置和结束位置。若lookingAt()方法返回true,m调用group()可以返回一个匹配模式的字符串对象。 下列几个方法也是下列几个方法也是MatcherMatcher对象对象m m常用的方法常用的方法npublic boolean find(int start) public boolean find(int start) 判断判断inpu

47、tinput从参数从参数startstart指定位置开始是否有和指定位置开始是否有和patterpatter匹配的子序列,参数匹配的子序列,参数startstart取值取值0 0时,该方法和时,该方法和lookingAt()lookingAt()的功能相同。的功能相同。npublic String replaceAll(String replacement) public String replaceAll(String replacement) MatcherMatcher对象对象m m调用该方法可以返回一个字符串对象,该字调用该方法可以返回一个字符串对象,该字符串是通过把符串是通过把inp

48、utinput中与模式中与模式patterpatter匹配的子字符串全部替匹配的子字符串全部替换为参数换为参数replacementreplacement指定的字符串得到的(注意,指定的字符串得到的(注意,inputinput本身没有发生变化)。本身没有发生变化)。npublic String replaceFirst(String replacement) public String replaceFirst(String replacement) MatcherMatcher对象对象m m调用该方法可以返回一个字符串对象,该字调用该方法可以返回一个字符串对象,该字符串是通过把符串是通过把i

49、nputinput中第中第1 1个与模式个与模式patterpatter匹配的子字符串匹配的子字符串替换为参数替换为参数replacementreplacement指定的字符串得到的(注意,指定的字符串得到的(注意,inputinput本身没有发生变化)本身没有发生变化)。import java.util.regex.*;class Examplepublic static void main(String args) Pattern p; Matcher m; String s1=0A1A2A3A4A5A6A7A8A9A; p=Ppile(dAd); m=p.matcher(s1); whi

50、le(m.find() String str=m.group();System.out.print(从从+m.start()+到到+m.end()+匹配模式子序列:匹配模式子序列:);System.out.println(str); String temp=m.replaceAll(*); System.out.println(temp); System.out.println(s1); m=p.matcher(9A00A3); if(m.matches() String str=m.group();System.out.println(str); elseSystem.out.println

51、(不完全匹配不完全匹配); if(m.lookingAt() String str=m.group();System.out.println(str);6.5 元字符模式元字符模式 在正则表达式(模式)中可以使用一对方括号括起若干个字符,代 表方括号中的任何一个字符。例如pattern=“159ABC”,那么“1ABC” 、“5ABC”和“9ABC”都是和模式pattern匹配的字符序列。 方括号模式的一些意义如下: abc abc:代表:代表a a、b b、c c中的任何一个。中的任何一个。 abc abc:代表除了:代表除了a a、b b、c c以外的任何字符以外的任何字符 a-d a-d

52、:代表:代表 a a至至d d中的任何一个。中的任何一个。 另外,中括号里允许嵌套中括号,可以进行并、交、差运算,例如: a-dm-p a-dm-p:代表:代表 a a至至d d, 或或 m m 至至 p p中的任何字符(并)。中的任何字符(并)。 a-z&def a-z&def :代表:代表d d、 e e、或、或 f f中的任何一个(交)。中的任何一个(交)。 a-f&bc a-f&bc: :代表:代表a a、d d、e e、f f (差)(差)表6.1代表单个字符的元字符 元字符元字符 在正则表达式中的写法在正则表达式中的写法 意义意义 . “.” 代表任何一个字符 d “d” 代表0至

53、9的任何一个数字 D “D” 代表任何一个非数字字符 s “s” 代表空格类字符, t、n、 x0B、 f、 r S “S” 代表非空格类字符 w “w” 代表可用于标识符的字符W “W” 代表不能用于标识符的字符 表 6.2 限定符带限定符号的模式 意义 X? X出现0次或1次 X* X出现0次或多次 X+ X出现1次或多次 Xn X恰好出现n次 Xn, X至少出现n次 Xn,m X出现n次至m次 6.6 Scanner类类Scanner类不仅可以创建出用于读取用户从键盘输入的类不仅可以创建出用于读取用户从键盘输入的数据的对象,而且可以创建出用于解析字符串的对象。数据的对象,而且可以创建出用

54、于解析字符串的对象。1、创建用于读取用户从键盘输入数据的对象创建用于读取用户从键盘输入数据的对象 Scanner input=new Scanner(System.in);其中:常用方法:其中:常用方法:nextInt();nextDouble();nextLine();import java.util.*;class Example public static void main(String args) Scanner input=new Scanner(System.in);String s;int x;double y;s=input.nextLine();x=input.nextIn

55、t();y=input.nextDouble();System.out.println(x=+x);System.out.println(y=+y);System.out.println(s=+s); 6.6 Scanner类类2、创建出用于解析字符串的对象创建出用于解析字符串的对象 Scanner input=new Scanner(str);1)使用默认分割标记(空白)解析字符串)使用默认分割标记(空白)解析字符串其中:常用方法:其中:常用方法:next ()-依次返回依次返回str中的单词中的单词hasNext ()-返回返回str中的单词是否已经被中的单词是否已经被next()方法()

56、方法解析完毕解析完毕nextInt()、 nextDouble()等方法将等方法将str中的字符串转换为中的字符串转换为相应数据类型的数据相应数据类型的数据import java.util.*;class Example public static void main(String args) Scanner input=new Scanner(System.in);String s;s=input.nextLine();Scanner scanner=new Scanner(s);while(scanner.hasNext() System.out.println(scanner.next(

57、); import java.util.*;class Examplepublic static void main(String args) Scanner input=new Scanner(System.in); String s; s=input.nextLine(); Scanner scanner=new Scanner(s); System.out.println(scanner.nextDouble()*10);6.6 Scanner类类2、创建出用于解析字符串的对象创建出用于解析字符串的对象 Scanner input=new Scanner(str); 2)使用正则表达式作

58、为分隔标记解析字符串)使用正则表达式作为分隔标记解析字符串其中:常用方法:其中:常用方法:useDelimiter (正则表达式正则表达式)-将一个正则表达式作为分将一个正则表达式作为分隔标记,即和正则表达式匹配的字符串都是分隔标记。隔标记,即和正则表达式匹配的字符串都是分隔标记。import java.util.*;class Example public static void main(String args) String s=市话费:市话费:176.89元,长途费:元,长途费:187.98,网络费:,网络费:928.66元元; Scanner scanner=new Scanner(

59、s); scanner.useDelimiter(0123456789.+); double sum=0; while(scanner.hasNext() try double p=scanner.nextDouble(); sum+=p; System.out.println(p); catch(InputMismatchException exp) String t=scanner.next(); System.out.println(总通信费用:总通信费用:+sum+元元); 作业作业P122 1、2 下课了。休息一会儿。休息一会儿。6.2 StringBuffer 类类 前面我们学习了

60、String字符串对象,String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,那么实体是不可以再发生变化的 在这一节,我们介绍StringBuffer类,该类能创建可修改的字符串序列,也就是说,该类的对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符串。 1StringBuffer类的构造方法 StringBuffer类有三个构造方法: (1)StringBuffer() (2)StringBuffer(int size) (3)StringBuffer(String s) 使用第1个无参数的构造

温馨提示

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

评论

0/150

提交评论