14-正则表达式、其他API_第1页
14-正则表达式、其他API_第2页
14-正则表达式、其他API_第3页
14-正则表达式、其他API_第4页
14-正则表达式、其他API_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、正则表达式、其他API面试题:/* * 面试题 * * 在Integer类中定义了成员内部类IntegerCache * 在这个内部类中有一个静态代码块,这个代码块中创建了 * Integer类型的数组,共计有256个空间, * 紧接着使用循环给Integer数组进行初始化。 * 将-128到127之间的256个数字已经封装成Integer对象存放在数组中。 * * 只要在程序中使用到的Integer类,就会自动的加载内部类IntegerCache。 * 内部类中就会将上述-128到127已经存储在数组中。 * 我们在程序中需要使用-128到127之间的Integer类型的数据时, * 这时J

2、VM不会再将我们制定的这些数据封装成对象,而是到IntegerCache内部维护的那个数组中 * 找到-128到127之间已经存在的这个对象,将这个对象的地址赋值给我们的程序中的引用变量。 * */public class Test public static void main(String args) /下面两行代码,其实并没有单独的去封装Integer对象,而是找缓存中的对象Integer i = -128;Integer i2 = -128;/下面两行代码,指定的数据由JVM单独去封装成Integer对象Integer i3 = -129;Integer i4 = -129;Syste

3、m.out.println(i = i2); /trueSystem.out.println(i3 = i4); /falseInteger i5 = new Integer(127);Integer i6 = new Integer(127);System.out.println(i5 = i6); /false1. 正则表达式1.1. 正则引入需求:验证输入的QQ号码是否正确/* * 需求:验证输入的QQ号码是否正确 * * 分析: * QQ号码是纯数字组成 * QQ的长度5 到 12 位之间 * QQ号码不能以 0 开始 * */public class QQCheckDemo publ

4、ic static void main(String args) /获取录入的QQ号码Scanner sc = new Scanner(System.in);System.out.println("请输入您的QQ号码:");String qq = sc.nextLine();/验证长度if( qq.length() >= 5 && qq.length() <= 12 )/验证是否以零开始if( !qq.startsWith("0") )/* * 验证是纯数字 * 将表示QQ号码的字符串转成数字,如果字符串中全部是数字 * 一定

5、可以转成一个整数,如果有其他的数字,转换就会发生异常 */trylong qq_num = Long.parseLong(qq);System.out.println("QQ号码正确");catch( NumberFormatException e )/e.printStackTrace();System.out.println("QQ号码必须是纯数字组成!");elseSystem.out.println("QQ号码不能以零开始!");elseSystem.out.println("QQ号码长度有误!");/演示

6、使用正则验证QQ号码boolean b = qq.matches("1234567890-94,11");System.out.println(b);1.2. 正则表达式介绍1.2.1. 正则表达式概念:在程序中经常需要对字符串这类数据进行合法性的验证,如果没有其他的新技术,就只能采用字符串中的原始方法进行截取等各种的判断,这样代码书写量大,并且不利于程序的维护。于是就提供了更加简便的技术来验证码字符串这类数据。这个技术就是正则表达式。正则表达式:正确的规则组成的一个表达式,它可以去验证其他的字符串数据合法性。1.2.2. 正则表达式的书写规则正则表达式是验证字符串:在正则

7、表达式中书写的规则是限定字符串中不同位置上可以出现哪些字符数据。正则的书写:正则表达式的体现也是字符串。需要验证的字符串数据:”abc” 条件是:字符串第一位上只能书写小写字母a 字符串第二位上可以书写 b 或者 c 字符串第三位上c或d或e正则表达式书写:”abccde”正则表达式的第一位上书写规则是用来验证字符串中第一位上可以书写的字符数据解释正则表达式中的用法:书写 中的内容,是用来验证字符串中某个位置上可以书写的字符数据字符串数据: 正则表达式:”1345780-9” 验证前三位解释正则表达式中 的用法:XN X表达式的是正则的规则,后面的N 表达式的是前面的

8、正则规则所在位置往后可以出现的次数字符串数据: 正则表达式:”1345780-99” 这个规则规定需要被验证的字符串中的第一位只能数字1,第二位是可以3、4、5、7、8中的任何一个,从第三位开始可以是0-9中的任何一个,一直到第11位。X? X依然是正则的规则,?表达式的是X这个规则可以出现零次或一次X* X依然是正则的规则,*表达式的是X这个规则可以出现零次或者多次X+ X依然是正则的规则,+表达式的是X这个规则可以出现一次或者多次 字符串数据:”abc“正则规则:”a?”字符串数据:”abcABC”正则规则:”.bcABC” 说明:当前的正则规定的字符串的第一位上

9、可以是任何的字符数据字符串数据: 正则表达式:”134578d9”. 表示任意字符数据d 表示数字字符w 表示字母 数字 下划线 (注意:没有 $ 符号)1.3. 正则演示/* * 验证手机号码 ,使用正则表达式 */public class TelNumberCheck public static void main(String args) /定义正则规则String regex = "1345780123456789d8"String tel = "quot;/验证boolean b = tel.matche

10、s(regex);/System.out.println(b);if( b )System.out.println("手机号码正确");elseSystem.out.println("手机号码有误");1.4. 正则常用功能介绍1.4.1. 匹配功能使用String类中的matches方法完成:/* * 简单验证身份证号码正确性 */public class IDCardCheck public static void main(String args) /需要被验证的字符串数据String idCard = "1101221990121256

11、7X"/正则的规则String regex = "1-90-95120-93010-901230-9d30-9Xx"/调用String类中的匹配方法验证boolean b = idCard.matches(regex);System.out.println(b);1.4.2. 切割功能/ 切割,使用点切割public static void method2() / 需要被切割的字符串数据String s = "abc.qwe.jk.2322.22bcd.3324"/* * 由于点(.)在正则中有特定的含义,如果在程序中需要使用点本身 * 就需要

12、使用转义字符表示点 */String regex = ".+"String strs = s.split(regex);for (int i = 0; i < strs.length; i+) System.out.println(strsi);/ 使用正则切割字符串public static void method() / 需要被切割的字符串数据String s = "abc qwe jkl 123 3432 324"/ 书写正则规则String regex = " +"String strs = s.split(regex)

13、;for (int i = 0; i < strs.length; i+) System.out.println(strsi);1.4.3. 正则中的组/ 切割,要求按照不同的叠词进行切割public static void method3() / 需要被切割的字符串数据String s = "abc#qwe#jklllll1232222bcd#abcccc3440123324"/* * 使用不同的叠词切割,由于不知道具体使用的是哪个叠词 * 字符串中的任何字符都有可能重复,这些字符都有可能作为切割的标准 * * 我们不知道具体是哪个字符在重复,因此只能使用正则中的点

14、(.)表示被切割的那个字符 * 只要这个字符重复了,就使用它作为切割标准。 * * 只要当前这个点匹配上了这个字符,就必须要求这个字符后面的 位置还要是这个字符 * 解决上述的这个问题:需要将已经匹配上的正则规则在当前这个位置的后面继续使用 * 这时就需要将这个规则封装成正则中的组,然后在后面的位置上使用这个组 * * 正则中的组的书写格式: * "(正则规则)后面就可以使用前面小括号中封装好的规则" * 如果需要在当前这个正则中引用前面已经存在的组,格式是: * 组号 * 正则中只要使用小括号,就代表将某个规则封装成一个组,每个组都有自己默认的编号 * 正则中的组的编号从

15、1开始,只要出现一个组,编号就自动+1. * * 例如:"(.)1" 先使用这个正则规则去匹配某个字符串中的第一个位置,如果匹配上之后 * 要求被匹配的第二个位置上的内容必须和第一个位置上的内容安全一致 * * (A)(B(C) 共计有4个组: * 第一组:(A)(B(C) 1 * 第二组:(A) 2 * 第三组:(B(C) 3 * 第四组:(C) 4 * 开发中尽量不要使用组或者是组的嵌套。 * */String regex = "(.)1+"String strs = s.split(regex);for (int i = 0; i < str

16、s.length; i+) System.out.println(strsi);1.4.4. 替换功能/* * 使用正则替换字符串中的数据 */public class ReplaceDemo public static void main(String args) method4();/正则替换练习public static void method4() /将下面的字符串中的数据 替换成“我要学Java编程”String s = "我我我我.要要要要要要.学学学学学.Java.编.程程程程程程"/先把字符串中的所有点干掉String s2 = s.replaceAll(&

17、quot;.+", "");System.out.println(s2);/将不同的叠词替换成一个String s3 = s2.replaceAll("(.)1+", "$1");System.out.println(s3);/使用正则的替换功能将手机号码中间四位替换成*public static void method3() String tel = "quot;/书写正则规则String regex = "(1345780-9)(d4)(d4)"String stri

18、ng = tel.replaceAll(regex, "$1*$3");System.out.println(string);/ 将字符串中的多个不同的叠词替换中一个叠词public static void method2() String s = "ssjddklffffjsklddddjfkkkkklsdjflllllksd"/* * 书写正则规则 * * 如果在一个正则表达式中,已经存在了组,在本正则中使用存在的组 * 直接使用组号的方式引用。 * 如果不在本正则表达式中引用正则中的组,需要使用$组号 */String regex = "

19、(.)1+"String new_str = s.replaceAll("(.)1+", "$1");System.out.println(new_str);/ 将多个#号 替换成一个#号public static void method() / 需要被替换的字符串String s = "sjk#lfj#sdk#ljfk#ld#sj"/ 书写正则规则String regex = "#+"String new_str = s.replaceAll(regex, "#");System.o

20、ut.println(new_str);1.4.5. 获取功能需求:从一个字符串中提取出指定的数据内容。“sdjflkskjfue1349876543riejrtircnvhdslflsdjfl”正则表达式它在Java中它属于字符串,但是这类字符串数据又具备了其他的功能。Java将正则表达式这类数据又重新封装一个类,使用这个类表示正则表达式这类事物(数据)。在Java中Pattern这个类表示正则表达式这类事物。Pattern类没有对外提供公开的构造方法,因此我们不能直接通过new关键字创建Pattern对象。当获取到正则对象之后,如果需要通

21、过这个正则对象去操作字符串数据,这时必须将正则和字符串进行组合,然后得到一个专业的匹配器对象。得到正则对象之后,需要使用其中的matcher方法将正则对象和字符串关联(组合),就会得到一个匹配器对象Matcher。我们需要获取、切割、替换字符串中的数据时,就需要通过Matcher对象完成。public static void method() /书写正则表达式String regex = "134578d9"/将正则表达式转成正则对象Pattern pattern = Ppile(regex);/指定需要操作的字符串数据String s = "lk123skj13

22、234561234djfuiejrtifl"/将字符串和正则对象进行组合Matcher matcher = pattern.matcher(s);/使用匹配器获取正则匹配上的数据内容while( matcher.find() )System.out.println(matcher.group();1.5. 正则符号总结() 分组,在正则中引用组使用 组号,其他地方使用 $组号 声明次数,前面的规则可以出现的次数 n 正好n次 n, 最少n次 n,m 最少n次,最多m次 可以出现的字符列表,在中括号中的内容都可以在字符串的某个位置上出现,但只能出现其中一个?

23、当前匹配的字符可以出现 零次 或 一次* 当前匹配的字符可以出现 零次 或 多次+ 当前匹配的字符可以出现 一次 或 多次. 当前字符串的位置上可以是任意字符。如果要匹配点,需要使用.d 0-9w a-zA-Z0-9_b 单词边界 字符串开始$ 字符串结束“w6,12$” 在字符串中只能出现a-zA-Z0-9_ 6到12次2. 其他API2.1. System类System类中的方法和成员变量都是静态的, 不需要创建System对象就可以直接使用。/* * 演示System的使用 */public class SystemDemo public static void main(String

24、args) /* * System类中的静态成员变量: out 和 err的区别 * out和err都可以把需要输出的信息展示在控制台上。 * 但是由于JVM的底层针对out和err是两种不同的实现机制 * 在输出的时候,数据的显示先后次序并不能确定 * * 建议:开发中要么全部是out,要么全部使用err */System.out.println("你好");System.err.println("hello");/强制退出JVMSystem.exit(0);/获取系统的当前时间,得到的是当前时间距离1970-1-1 0:0:0秒的时间差/获取到的是一

25、个毫秒值。1秒=1000毫秒System.out.println(System.currentTimeMillis();结论:只要获取和系统相关的信息时就应该考虑使用System类。2.2. Math类Math:它封装了和数学运算相关的方法。Math类中的方法都是静态的,可以通过类名直接调用。/* * 演示Math类 */public class MathDemo public static void main(String args) System.out.println(Math.E);System.out.println(Math.PI);/返回大于指定数据的最小整数System.out

26、.println(Math.ceil(4.56);/返回小于指定数据的最大整数System.out.println(Math.floor(4.56);/四舍五入System.out.println(Math.round(4.56);/01之间的一个随机数System.out.println(Math.random();2.3. Random类Random类它是专门负责产生随机数的类。/* * 演示随机数类 */public class RandomDemo public static void main(String args) / 创建产生随机数的那个对象Random r = new Ran

27、dom();System.out.println(r.nextFloat();System.out.println(r.nextDouble();System.out.println(r.nextInt();System.out.println(r.nextBoolean();System.out.println(r.nextLong();System.out.println(r.nextInt(100);for( int i = 0 ; i < 6 ; i+)System.out.println(r.nextInt(6) + 1);3. JDK5的特性3.1. 静态导入/* * 静态导

28、入演示 * 在程序中如果需要使用某些类中的静态成员,可以在程序开始的时候, * 先将这些静态成员导入到程序中 * 然后在程序中就可以直接使用静态成员,而不需要指定类名 */import static java.lang.Math.PI;import static java.lang.System.out;public class StaticImportDemo public static void main(String args) out.println(PI);3.2. 可变参数/* * 演示可变参数 */public class ParameterArgumentsDemo publi

29、c static void main(String args) int sum = getSum(1, 2, 4);System.out.println(sum);/* * 如果需要操作多个类型相同的数据的,将这些数据需要传递给某个方法 * 在JDK5之前:可以先将这些数据存储到数组中,然后将数组传递给方法 * * 到JDK5之后,可以使用可变参数的技术来接收不确定个数的数据 * */int arr = 11,22,33,44,55,66,77,88;int sum2 = getSum(12,33,44,55 );System.out.println(sum2);/* * 演示定义可变参数的方法 * 可变参数: * 1、它实际中接收到的数据之后,依然保持在数组中,在方法中还是要通过数组的方式进行操作 * 2

温馨提示

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

评论

0/150

提交评论