7java 西电_生产经营管理_经管营销_专业资料_第1页
7java 西电_生产经营管理_经管营销_专业资料_第2页
7java 西电_生产经营管理_经管营销_专业资料_第3页
7java 西电_生产经营管理_经管营销_专业资料_第4页
7java 西电_生产经营管理_经管营销_专业资料_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

常用预定义类,网络与信息安全学院/计算机学院孙聪,字符串操作正则表达式数学运算与随机数Arrays类Wrapper类,字符串操作,StringStringBuilderStringTokenizerScanner,java.lang.String,用于操作非数值型字符串构造方法public String():构造一个空字符串public String(char value):使用字符数组value中的字符以构造一个字符串public String(String orig):使用原字符串orig的拷贝以构造一个新字符串,/* String对象是不可变的String类中每个修改String值的方法,实际上都会创建一个新的String对象,以包含修改后的字符串的内容*/public class Immutablepublic static String lowerCase(String s)return s.toLowerCase();public static void main(String args)String s=Java;System.out.println(s);String s2=lowerCase(s);System.out.println(s2);System.out.println(s);,java.lang.String主要接口方法,java.lang.String主要接口方法(续),java.lang.String数据类型转换,各种基本数据类型与String类型之间可通过方法相互转换基本数据类型的对象 = 字符串:使用String类的静态valueOf() 方法:public static String valueOf(boolean b)public static String valueOf(char c)public static String valueOf(int i)public static String valueOf(long l)public static String valueOf(float f)public static String valueOf(double d),java.lang.String,String类型字符串 = 基本类型值通过基本类型对应的Wrapper类的静态parse方法String类型字符串 = Wrapper类对象通过基本类型对应的Wrapper类的静态valueOf方法例:TestConversion.java,java.lang.String的常量池,String类中存在一个专门的常量池,具有特殊的作用。由于String对象一经创建就不能被修改,因此String类型的字面常量会自动被加入常量池中,每当程序中出现字面常量时,搜索常量池中是否存在该字面常量字符串(用equals()方法判断),如果不存在,就将该字面常量加入常量池中;如果已经存在,就直接返回常量池中的对象引用。,public class StringImmediatepublic static void main(String args)String s1=new String(hello);String s2=new String(hello);System.out.println(s1=s2);String s3=hello;String s4=hello;System.out.println(s3=s4);,当用s3引用字面常量“hello”时,程序搜索常量池,由于“hello” 不在常量池中,故将“hello”加入常量池并将其引用返回给s3,当用s4引用字面常量“hello”时,再次搜索常量池,发现“hello”后将其引用直接返回给s4。故s3和s4都引用到常量池中同一个对象,s1和s2会引用堆中的不同对象,java.lang.StringBuilder,提供了一个字符串的可变序列,它对存储的字符序列可以任意修改,使用起来比String类灵活在JavaSE 5中引入,此前Java使用StringBufferStringBuilder与StringBuffer兼容,但StringBuffer是同步的,StringBuilder非同步因而效率高,java.lang.StringBuilder,构造方法StringBuilder():构造一个空StringBuilder对象,初始容量为16个字符StringBuilder(String str):构造一个StringBuilder对象,初始内容为字符串str的拷贝接口方法StringBuilder类的indexOf()、length()、charAt()、subSequence()、substring()等方法与String类中的方法类似StringBuilder类有两种特有的方法系列,即append()方法系列和insert()方法系列,java.lang.StringBuilder接口方法,java.lang.StringBuilder接口方法(续1),append()方法根据参数的数据类型在StringBuilder对象的末尾直接进行数据添加public StringBuilder append (boolean b)public StringBuilder append (char c)public StringBuilder append (char str)public StringBuilder append (char str, int offset, int len)public StringBuilder append (double d)public StringBuilder append (float f)public StringBuilder append (int i)public StringBuilder append (long l)public StringBuilder append (Object obj)public StringBuilder append (String str)public StringBuilder append (StringBuffer sb),java.lang.StringBuilder接口方法(续2),insert()方法系列根据参数的数据类型在StringBuilder对象的offset位置进行数据插入public StringBuilder insert (int offset, boolean b)public StringBuilder insert (int offset, char c)public StringBuilder insert (int offset, char str)public StringBuilder insert (int offset, float f)public StringBuilder insert (int offset, int i)public StringBuilder insert (int offset, long l)public StringBuilder insert (int offset, Object obj)public StringBuilder insert (int offset, String str)StringBuilderDemo.java,java.util.StringTokenizer,是一个实现Enumeration接口的类,它使得应用程序可以将字符串分成多个记号,默认情况下以空格为分隔符,例如将字符串“this is a test”分成四个单词记号。用户也可以指定分隔符构造方法StringTokenizer(String str):以字符串str构建StringTokenizer对象StringTokenizer(String str, String delim):使用delim分隔符,以字符串str构建StringTokenizer对象StringTokenizer(String str, String delim, boolean returnDelims):returnDelims决定分隔符本身是否也作为结果返回,java.util.StringTokenizer接口方法,public class StringTokenizerDemo public static void main(String args) String str = 数学:英语:语文:化学; StringTokenizer st = new StringTokenizer(str, :); System.out.println(课程数: + st.countTokens(); while (st.hasMoreTokens() System.out.print(st.nextToken()+; ); System.out.println(); String result = str.split(:); for (int x=0; xresult.length; x+) System.out.print(resultx+; ); System.out.println(); Scanner scanner=new Scanner(str); scanner.useDelimiter(:); while(scanner.hasNext() System.out.print(scanner.next()+; ); scanner.close(); ,java.util.Scanner类,J2SE 5.0引入实现从文本或标准输入读取输入构造方法可接受多种输入对象FileInputStreamStringReadable例:Scanner sc=new Scanner(System.in);,java.util.Scanner类,Scanner将输入按照分隔符模式进行分割,分隔符模式默认为匹配空格扫描结果通过各种next*()方法转化为不同类型的值,next*()仅在找到了一个完整的分隔符后才返回next()获取一个字符串nextByte() 获取一个byte类型的整数nextShort() 获取一个short类型的整数nextInt() 获取一个int类型的整数nextLong() 获取一个long类型的整数nextFloat() 获取一个float类型的数nextDouble() 获取一个double类型的数nextLine() 获取一行文本(即以回车键为结束标志),java.util.Scanner类:从控制台读取输入,例:读取和计算个数不定的多个整数之和,以0结束Scanner sc=new Scanner(System.in);int sum=0, data;while(data=sc.nextInt()!=0) sum+=data;System.out.println(sum);又例:ScannerDemo.java,字符串操作正则表达式数学运算与随机数Arrays类Wrapper类,正则表达式的概念与创建方法通过String使用正则表达式通过Pattern/Matcher使用正则表达式通过Scanner使用正则表达式,正则表达式的概念,正则表达式用一些特定字符及这些字符的组合,组成一个“规则字符串”,该字符串描述一串文本的特征模式,表达对字符串的一种过滤逻辑。用于验证用户输入的数据或检索大量文本。一旦找到与已知文本模式匹配的输入字符串,即可对其进行相应的处理,从而完成对字符串的匹配、选择和编辑。给定一个正则表达式和一个输入字符串,可以判定输入字符串是否符合正则表达式的过滤逻辑(匹配);通过正则表达式从输入字符串中获取特定部分(选择)。,正则表达式的常用字符,在Java源代码中,反斜线需使用转义字符表示并在编译时预处理,故在源代码中需使用表示正则表达式的反斜线字符,正则表达式的常用逻辑操作符,字符类(character class),又称字符集(character set),用来告诉正则表达式引擎去匹配多个字符中的一个。在字符类的方括号中,字符的顺序无关紧要。,正则表达式的主要字符类,正则表达式的主要边界匹配符,量词,用来描述一个模式吸收输入文本的方式在Java中,正则表达式的量词可分为贪婪型(最常用):为所有可能的模式发现尽可能多的匹配勉强型:匹配满足模式的最少字符数占有型(Java特有):不保存用于回溯的中间状态,正则表达式中的量词,在使用量词时,通常X都必须使用圆括号括起来,写出以下文本结构对应的正则表达式变量名引号内的字符串美元金额表示时刻的文字,正则表达式的概念与创建方法通过String使用正则表达式通过Pattern/Matcher使用正则表达式通过Scanner使用正则表达式,String类中与正则表达式相关的方法,/*-?d+以零个或一个减号起始的一个或多个数字(-|+)?d+以零个或一个减号或加号起始的一个或多个数字*/public class StringMatchpublic static void main(String args)System.out.println(12345.matches(-?d+);System.out.println(-67890.matches(-?d+);System.out.println(+1982.matches(-?d+);System.out.println(+1982.matches(-|+)?d+);,/*第一次切分:空格字符第二次切分:一个或多个非词字符第三次切分:字符e后紧跟一个或多个非词字符*/public class StringSplit private static String content = I believe I can fly, I believe I can touch the sky.; private static void split(String regex) System.out.println(Arrays.toString(content.split(regex); public static void main(String args) split( ); split(W+); split(eW+); ,public class StringReplacement private static String content = I believe I can fly, I believe I can touch the sky.; public static void main(String args) System.out.println(content.replaceAll(IW+, You-); System.out.println(content.replaceFirst(cw+, cannot); /*将content中所有的“由I起始的后跟一个或多个非词字符”的子串替换为“You-”将content中第一个“由c起始的后跟一个或多个词字符”的子串替换为“cannot”注意,两次替换都是针对原始的content字符串展开的。String类中每个与String修改相关的方法,实际上都会创建一个新的String对象,而不是直接对String内容进行修改。*/,正则表达式的概念与创建方法通过String使用正则表达式通过Pattern/Matcher使用正则表达式通过Scanner使用正则表达式,Pattern和Matcher的概念,J2SE 1.4开始,Java就内建了正则表达式包java.util.regeximport java.util.regex.*;java.util.regex包中包含Pattern类和Matcher类Pattern对象:编译好的正则表达式,可以应用于任意多个字符串Matcher对象:单独的字符串实例,表示将正则表达式应用于具体的目标字符串上,组(group),组用来指定用括号划分的正则表达式的一部分模式组编号为0表示整个正则表达式,组编号为1表示被第1对括号括起来的组,依次类推。例如,对于正则表达式(?m)(S+),组0是(?m)(S+),组1是(?m),组2是(S+)。,Pattern和Matcher的用法,通过Ppile()静态方法将正则表达式字符串编译为一个Pattern对象;将需要检索的输入字符串作为参数传入该Pattern对象的matcher()方法,得到一个Matcher对象;用Matcher类的方法对字符串进行具体的处理。,Matcher类的典型接口方法,public class PatternMatcherTest public static void main(String args) Matcher m=Ppile(w+).matcher(I believe I can fly, I believe I can touch the sky.); while(m.find() System.out.print(m.group()+ ); System.out.println(); int i=0; while(m.find(i) System.out.print(m.group()+ ); i+; System.out.println(); m=Ppile(d+w+).matcher(This is my 1st paper); while(m.find() System.out.println(Match +m.group()+ at (+m.start()+,+m.end()+); ,public class MatchGroup public static void main(String args) String url=:8080; String regex=(?x) (https?):/ (/:+) (?:(d+)?; Matcher m=Ppile(regex).matcher(url); if(m.find() System.out.println(Overall +m.group()+ at (+m.start()+,+m.end()+); System.out.println(Protocol +m.group(1)+ at (+m.start(1)+,+m.end(1)+); System.out.println(Hostname +m.group(2)+ at (+m.start(2)+,+m.end(2)+); if(m.group(3)=null) System.out.println(default port: 80); else System.out.println(Port +m.group(3)+ at (+m.start(3)+,+m.end(3)+); /* (?:是非捕获组的起始。非捕获组匹配文本,但不捕获匹配的文本,且不给此分组分配组号 */,正则表达式regex使用了(?x)模式,此模式下,空格被忽略,且以#起始直到行尾的注释也被忽略,组1匹配http或https,组2匹配http:/或https:/后面直到第一个/或:出现之前的所有字符,表示如果存在组3,那么组3对应于(d+)所匹配的文本,Matcher类的典型接口方法(续),public class Replacement public static void main(String args) String text=Before Java 1.5 was Java 1.4.2. After Java 1.5 is Java 1.6; String regex=bJavas*1.(56)b; Matcher m=Ppile(regex).matcher(text); String result=m.replaceAll(Java $1.0); System.out.println(result); m=Ppile(w+).matcher(+one-two+); StringBuffer sb=new StringBuffer(); while(m.find() m.appendReplacement(sb, YYY); System.out.println(sb.toString(); m.appendTail(sb); System.out.println(sb.toString(); ,String vs. Pattern/Matcher,s为输入字符串,regex为正则表达式字符串,s2为替换字符串,则以下两类方法调用等价,public class PatternSplit private static String content = I believe I can fly, I believe I can touch the sky.; private static void split(String regex) System.out.println(Arrays.toString(Ppile(regex).split(content); public static void main(String args) split( ); split(W+); split(eW+); ,正则表达式的概念与创建方法通过String使用正则表达式通过Pattern/Matcher使用正则表达式通过Scanner使用正则表达式,Scanner类的正则表达式接口,Scanner类除了能扫描基本类型之外,还能与自定义正则表达式配合进行扫描hasNext(Pattern pattern):检查当前Scanner是否还有子串能够与pattern匹配next(Pattern pattern):找到并返回下一个能够与pattern完整匹配的子串match():获得MatchResult类型的匹配结果。通过MatchResult的group()方法获得指定组对应的匹配子串,public class ScannerRegex private static String data= 6102/10/2005n+ 002/11/2005n+ 6102/11/2005n; public static void main(String args) Scanner scanner=new Scanner(data); String pattern=(d+.d+.d+.d+)(d2/d2/d4); while(scanner.hasNext(pattern) scanner.next(pattern); MatchResult match=scanner.match(); String ip=match.group(1); String date=match.group(2); System.out.printf(Threat on %s from %sn, date, ip); scanner.close(); ,字符串操作正则表达式数学运算与随机数Arrays类Wrapper类,java.lang.Math(三角函数方法),java.lang.Math(指数函数方法),java.lang.Math(浮点数操作方法),java.lang.M

温馨提示

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

评论

0/150

提交评论