字符串和正则表达式第7章实用类(自学).ppt
Java 语言程序设计,天津理工大学 计算机与通信工程学院主讲教师:孙世温,2023/5/26,第6章 第7章 Java中的常用类,第 2 页,第6章 字符串和正则表达式 第7章 常用实用类,2023/5/26,第6章 第7章 Java中的常用类,第 3 页,主要内容,Object 类 System 类 Math 类 基本数据类型的包裹类 BigInteger 类 字符串相关类String 类StringBuffer 类StringTokenizer 类 Date 类 Calender 类正则匹配表达式,2023/5/26,第6章 第7章 Java中的常用类,第 4 页,Object 类“根”类,Object类定义在java.lang包中所有的Java类派生自Object类如果一个类没有用extends继承其他类,则它继承ObjectObject类是所有类层次结构的终极根类Object包含一些有用的方法,这些方法被所有子类继承,2023/5/26,第6章 第7章 Java中的常用类,第 5 页,Object 类“根”类,Object类定义的方法之一:toStringObject类的toString方法被定义返回一个字符串,包含对象的类名和对象的地址值自定义的类重写toString方法,实质是覆盖了父类的toString方法用println方法输出一个对象时,默认调用toString方法;如果自定义了toString方法,就调用自定义的;如果没有自定义,就调用继承来的toString方法,【例 toString的例子】,2023/5/26,第6章 第7章 Java中的常用类,第 6 页,Object 类“根”类,Object类定义的方法之二:equalsObject类的equals方法确定两个引用变量是否是别名,与=的用法相同(is identical to)子类一般通过覆盖Object的equals方法实现更有意义的测试,可以实现:若同一类型的两个不同对象包含相同的信息即返回true(is equals to)很多Java标准类都重新定义了自己的equals方法,实现两个对象的相等性比较,【例 TestEquals.java】,2023/5/26,第6章 第7章 Java中的常用类,第 7 页,System类,有三个标准I/O对象,又叫控制台I/O标准输入(键盘)由System.in定义标准输出(显示器)由System.out定义标准错误输出(显示器)由System.err定义当执行print或println语句时,我们使用System.out对象System.in是InputStream类的对象用()从键盘读入一个字符,2023/5/26,第6章 第7章 Java中的常用类,第 8 页,基本数据类型的包裹类,Java的每种基本类型(8种)都有一个类与之对应,2023/5/26,第6章 第7章 Java中的常用类,第 9 页,包裹类使用示例,Boolean wrapBool=new Boolean(false);Integer num1=new Integer(31);Integer num2=new Integer(3);int sum=num1.intValue()*num2.intValue();,intValue()返回调用对象的整型值,class CmdArg public static void main(String args)int sum=0;for(int cnt=0;cnt args.length;cnt+)sum+=Integer.parseInt(argscnt);(和为:+sum);,parseInt()方法将执行从字符串转换成与之相应的整型(int)值,2023/5/26,第6章 第7章 Java中的常用类,第 10 页,Math类科学计算类,Math类定义在java.lang包中其中包含许多数学计算方法:public static long abs(double a)返回a的绝对值。public static double max(double a,double b)返回a、b的最大值。public static double min(double a,double b)返回a、b的最小值。,2023/5/26,第6章 第7章 Java中的常用类,第 11 页,public static double random()产生一个0到1之间的随机数(不包括0和1)。public static double pow(double a,double b)返回a的b次幂。public static double sqrt(double a)返回a平方根。public static double log(double a)返回a的对数。public static double sin(double a)返回正弦值。public static double asin(double a)返回反正弦。,2023/5/26,第6章 第7章 Java中的常用类,第 12 页,NumberFormat类数字的格式化输出,NumberFormat类类调用类方法:public static final NumberFormat getInstance()实例化一个NumberFormat对象该对象调用 public final String format(double number)方法可以格式化数字numberNumberFormat类有如下常用方法:void setMaximumFractionDigits(int newValue)void setMinimumFractionDigits(int newValue)void setMaximumIntegerDigits(int newValue)void setMinimumIntegerDigits(int newValue),【例7-4】,2023/5/26,第6章 第7章 Java中的常用类,第 13 页,BigInteger类大整数类,java.math包中的BigInteger类提供任意精度的整数运算构造方法:public BigInteger(String val)类的常用方法:public BigInteger add(BigInteger val)public BigInteger subtract(BigInteger val)public BigInteger multiply(BigInteger val)public BigInteger divide(BigInteger val),2023/5/26,第6章 第7章 Java中的常用类,第 14 页,public BigInteger remainder(BigInteger val)public int compareTo(BigInteger val)public BigInteger abs()public BigInteger pow(int exponent)public String toString()返回当前大整数对象 十进制的字符串表示public String toString(int p)返回当前大整数对象p进制的字符串表示,【例7-6】,2023/5/26,第6章 第7章 Java中的常用类,第 15 页,String类不可变字符串,构建String对象String s=new String(“I love Java”)String s1=“I love Java”;String s2=new String(s);char Ar=J,a,v,a;String s3=new String(Ar);String s4=new String(Ar,2,2);,构造函数String(char a,int startIndex,int count):提取字符数组a 中的一部分字符创建一个字符串对象,参数startIndex:在a中提取字符的起始位置 count:从指定位置开始截取的字符个数,2023/5/26,第6章 第7章 Java中的常用类,第 16 页,String类中的常用方法:(1)返回长度:public int length()(2)比较:public boolean equals(String s)比较当前字符串对象的实体是否与参数指定的字符串s的实体相同 public int compareTo(String s)按字典序与参数s指定的字符串比较大小。(3)判断public boolean startsWith(String s)public boolean endsWith(String s),2023/5/26,第6章 第7章 Java中的常用类,第 17 页,(4)检索public int indexOf(String s)public int indexOf(String s,int startpoint)public int lastIndexOf(String s)(5)子串public String substring(int startpoint)public String substring(int start,int end)public String trim()(6)替换public String replaceAll(String old,String new),2023/5/26,第6章 第7章 Java中的常用类,第 18 页,字符串 基本数据基本数据类型包裹类中方法:public static XXX parseXXX(String s)将“数字”格式的字符串,转化为相应的基本数据类型 如:Integer类的方法:public static int parseInt(String s),2023/5/26,第6章 第7章 Java中的常用类,第 19 页,基本数据 字符串 使用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)对象的字符串表示重写toString()方法,2023/5/26,第6章 第7章 Java中的常用类,第 20 页,String与字符数组(char)利用字符数组构建字符串String(char)String(char,int offset,int length)将字符串存放到字符数组中public void getChars(int start,int end,char c,int offset)public char toCharArray(),【例6-4】,2023/5/26,第6章 第7章 Java中的常用类,第 21 页,String与字节数组(byte)利用字节数组构建字符串String(byte)String(byte,int offset,int length)字符串转化为字节数组public byte getBytes(),【例6-5】,2023/5/26,第6章 第7章 Java中的常用类,第 22 页,StringBuffer类可变字符串,String类字符串不能修改、删除或替换字符串中的某个字符StringBuffer类能创建可修改的字符串序列StringBuffer类有三个构造方法:(1)StringBuffer()(2)StringBuffer(int size)(3)StringBuffer(String s),2023/5/26,第6章 第7章 Java中的常用类,第 23 页,StringBuffer类的常用方法:(1)append方法(2)char charAt(int n)(3)void setCharAt(int n,char ch)(4)StringBuffer insert(int index,String str)(5)StringBuffer reverse()(6)StringBuffer delete(int startIndex,int endIndex)(7)StringBuffer replace(int startIndex,int endIndex,String str),【例6-6】,2023/5/26,第6章 第7章 Java中的常用类,第 24 页,StringTokenizer类字符串分解,使用java.util包中的StringTokenizer类将字符串分解成可被独立使用的单词StringTokenizer类的构造方法StringTokenizer(String s)为字符串s构造一个分析器。使用默认的分隔符集合,即空格符(若干个空格被看做一个空格)、换行符、回车符、Tab符、进纸符。StringTokenizer(String s,String delim)为字符串s构造一个分析器,参数dilim中的字符被作为分隔符。,【例6-7】,2023/5/26,第6章 第7章 Java中的常用类,第 25 页,Date类时间、日期,Date类构造方法无参Date()创建的对象可以获取本地当前时间Date(long time)创建的Date对象表 示相对1970年1月1日0点(GMT)的时间System类currentTimeMillis()获取系统当前时间,这个时间是从1970年1月1日0点(GMT)到目前时刻所走过的毫秒数,2023/5/26,第6章 第7章 Java中的常用类,第 26 页,使用DateFormat的子类SimpleDateFormat来实现日期的格式化SimpleDateFormat有一个常用构造方法:public SimpleDateFormat(String pattern)该构造方法可以用参数pattern指定的格式创建一个对 象SimpleDateFormat类的对象调用 format(Date date)方法格式化时间对象date,2023/5/26,第6章 第7章 Java中的常用类,第 27 页,pattern中含有“时间元字符”,即要输出的日期的格式设定y或yy 表示用2位数字输出年份;yyyy 表示用4位数字输出年份;M或MM 表示用2为数字或文本输出月份;d 或dd 表示用2位数字输出日;H或HH 表示用两位数字输出小时;m或mm 表示用两位数字输出分;s或ss 表示用两位数字输出秒;E 表示用字符串输出星期;,【例7-1】,2023/5/26,第6章 第7章 Java中的常用类,第 28 页,Calender类日历,使用Calendar类的static方法getInstance()可以初始化一个日历对象,如:Calendar calendar=Calendar.getInstance();calendar对象可以调用方法:public final void set(int year,int month,int date)public final void set(int year,int month,int date,int hour,int minute)public final void set(int year,int month,int date,int hour,int minute,int second)public int get(int field)可以获取有关年份、月份、小时、星期等信息,【例7-2】,【例7-3】,2023/5/26,第6章 第7章 Java中的常用类,第 29 页,正则表达式之 Backus-Naur范式(BNF),元符号:BNF规定了一些符号作为描述语法的机制,称作元符号,包括::=表示“定义为”。|表示“或者”。表示“任选”,即方括号内的内容可以出现一次或不出现。表示“重复”,即花括号内的内容可以出现零次或任意多次。终结符号:BNF中不必定义的符号或字符串,如A、B、0、1等,2023/5/26,第6章 第7章 Java中的常用类,第 30 页,非终结符号:在用法规则中需要加以定义的语法变量,如字母、数字、标识符 a_06,list 等每一个非终结符号都必须有一个规则定义它,非终结符号按规则总是可以展开为一串终结符号。,正则表达式之 Backus-Naur范式(BNF),2023/5/26,第6章 第7章 Java中的常用类,第 31 页,例:标识符的BNF描述。标识符:=字母 字母|数字 字母:=A|B|Z|a|b|z|_数字:=0|1|9,正则表达式之 Backus-Naur范式(BNF),2023/5/26,第6章 第7章 Java中的常用类,第 32 页,正则表达式与模式匹配,1正则表达式一个正则表达式是含有一些具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符。“dok”中的d就是有特殊意义的元字符,代表0到9中的任何一个。一个正则表达式也称作一个模式.字符串“9ok”和“1ok”都是和模式:“dok”匹配的字符串之一。和一个模式匹配的字符串称作匹配模式字符串,也称作模式匹配字符串。,2023/5/26,第6章 第7章 Java中的常用类,第 33 页,正则表达式与模式匹配,2模式匹配模式匹配就是检索和指定模式匹配的字符串。Java提供了专门用来进行模式匹配的类,这些类在包中。,2023/5/26,第6章 第7章 Java中的常用类,第 34 页,(1)建立模式对象 进行模式匹配的第一步就是使用Pattern类创建一个对象,称作模式对象。Pattern类调用类方法compile(String patter)来完成这一任务,其中的参数patter是一个正则表达式,称作模式对象使用的模式。【例】我们使用正则表达式“Ad”建立一个模式对象p:Pattern p=Ppile(Ad);如果参数patter指定的正则表达式有错,complie方法将抛出异常:PatternSyntaxException。,2023/5/26,第6章 第7章 Java中的常用类,第 35 页,Pattern类也可以调用类方法compile(String regex,int flags)返回一个Pattern对象。参数flags可以取下列有效值:Pattern.CASE_INSENSITIVE Pattern.MULTILINE Pattern.DOTALL Pattern.UNICODE_CASE Pattern.CANON_EQ flags取值Pattern.CASE_INSENSITIVE,模式匹配时将忽略大小写。,2023/5/26,第6章 第7章 Java中的常用类,第 36 页,(2)建立匹配对象模式对象p调用matcher(CharSequence input)方法返回一个Matcher对象m,称作匹配对象。参数input可以是任何一个实现了CharSequence接口的类创建的对象。String类和StringBuffer类都使用了CharSequence接口。,2023/5/26,第6章 第7章 Java中的常用类,第 37 页,public boolean find()寻找input和patter匹配的下一子序列public boolean matches()判断input是否完全和patter匹配。public boolean lookingAt()判断从input的开始位置是否有和patter匹配的子序列。,一个Matcher对象m可以使用下列3个方法寻找参数input指定的字符序列中是否有和模式patter匹配的子序列(patter是创建模式对象p时使用的正则表达式)。,2023/5/26,第6章 第7章 Java中的常用类,第 38 页,Matcher对象m常用的方法:public boolean find(int 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本身没有发生变化)。,【例6-8】,2023/5/26,第6章 第7章 Java中的常用类,第 39 页,元字符模式,在正则表达式(模式)中可以使用一对中括号括起若干个字符,代表中括号中的任何一个字符。【例】pattern=“159ABC”“1ABC”、“5ABC”和“9ABC”都是和模式pattern匹配的字符序列。中括号模式的一些意义:abc:代表a、b、c中的任何一个。abc:代表除了a、b、c以外的任何字符a-d:代表 a至d中的任何一个。中括号里允许嵌套中括号,可以进行并、交、差运算,例如:a-dm-p:代表 a至d,或 m 至 p中的任何字符(并)。a-z&def:代表d、e、或 f中的任何一个(交)。a-f&bc:代表a、d、e、f(差),2023/5/26,第6章 第7章 Java中的常用类,第 40 页,代表单个字符的元字符,2023/5/26,第6章 第7章 Java中的常用类,第 41 页,限定符,返回,2023/5/26,第6章 第7章 Java中的常用类,第 42 页,限定符模式,用X代表正则表达式中的一个元字符或普通字符,那么X?就表示X出现0次或1次。【例】pattern=“A1359?”(X是“1359”)“A”、“A1”、“A3”、“A5”、“A9”是匹配模式pattern的全部字符串。【例】pattern=“w4”(X是“w”)“abcd”、“girl”、“moon”、“flag”都是匹配模式pattern的字符串之一。,【例6-9】,2023/5/26,第6章 第7章 Java中的常用类,第 43 页,模式的逻辑或,模式可以使用“|”位运算符进行逻辑“或”运算得到一个新模式。例如,pattern1、pattern2是两个模式,即两个正则表达式。【例】pattern=pattern1|pattern2一个字符串如果匹配模式pattren1或匹配模式pattern2,那么就匹配模式pattern。,返回,【例6-10】,2023/5/26,第6章 第7章 Java中的常用类,第 44 页,正则表达式与字符串分解,public String split(String regex)字符串调用该方法时,使用参数指定的正则表达式regex做为分隔标记分解出其中的单词,并将分解出的单词存放在字符串数组中。,【例6-11】,2023/5/26,第6章 第7章 Java中的常用类,第 45 页,本章小结,Java中的典型类和常用类ObjectSystemMathString StringBuffer StringTokenizerDateCalender正则匹配请结合Java API Doc和相关例子,尽可能多地掌握常用类及使用方法,