java 正则匹配性别_Java笔记(14):常用对象--正则表达式、GC

1、如何校验一个QQ号码案例

1 packagecn.itcast_01;2

3 importjava.util.Scanner;4

5 /*

6 * 校验qq号码.7 * 1:要求必须是5-15位数字8 * 2:0不能开头9 *10 * 分析:11 * A:键盘录入一个QQ号码12 * B:写一个功能实现校验13 * C:调用功能,输出结果。14 */

15 public classRegexDemo {16 public static voidmain(String[] args) {17 //创建键盘录入对象

18 Scanner sc = newScanner(System.in);19 System.out.println("请输入你的QQ号码:");20 String qq =sc.nextLine();21

22 System.out.println("checkQQ:"+checkQQ(qq));23 }24

25 /*

26 * 写一个功能实现校验 两个明确: 明确返回值类型:boolean 明确参数列表:String qq27 */

28 public static booleancheckQQ(String qq) {29 boolean flag = true;30

31 //校验长度

32 if (qq.length() >= 5 && qq.length() <= 15) {33 //0不能开头

34 if (!qq.startsWith("0")) {35 //必须是数字

36 char[] chs =qq.toCharArray();37 for (int x = 0; x < chs.length; x++) {38 char ch =chs[x];39 if (!Character.isDigit(ch)) {40 flag = false;41 break;42 }43 }44 } else{45 flag = false;46 }47 } else{48 flag = false;49 }50

51 returnflag;52 }53 }

使用正则表达式改进:

1 packagecn.itcast_01;2

3 importjava.util.Scanner;4

5 /*

6 * 正则表达式:符合一定规则的字符串。7 */

8 public classRegexDemo2 {9 public static voidmain(String[] args) {10 //创建键盘录入对象

11 Scanner sc = newScanner(System.in);12 System.out.println("请输入你的QQ号码:");13 String qq =sc.nextLine();14

15 System.out.println("checkQQ:" +checkQQ(qq));16 }17

18 public static booleancheckQQ(String qq) {19 //String regex ="[1-9][0-9]{4,14}";20 // //public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式21 //boolean flag = qq.matches(regex);22 //return flag;23

24 //return qq.matches("[1-9][0-9]{4,14}");

25

26 return qq.matches("[1-9]\\d{4,14}");27 }28 }

正则表达式的规则:

A:字符

x 字符 x。举例:'a'表示字符a

\\ 反斜线字符。

\n 新行(换行)符 ('\u000A')

\r 回车符 ('\u000D')

B:字符类

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)

[0-9] 0到9的字符都包括

C:预定义字符类

. 任何字符。我的就是.字符本身,怎么表示呢? \.

\d 数字:[0-9]

\w 单词字符:[a-zA-Z_0-9]

在正则表达式里面组成单词的东西必须有这些东西组成

D:边界匹配器

^ 行的开头

$ 行的结尾

\b 单词边界

就是不是单词字符的地方。

举例:hello world?haha;xixi

E:Greedy 数量词

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

2、正则表达式的判断功能

1 packagecn.itcast_02;2

3 importjava.util.Scanner;4

5 /*

6 * 判断功能7 * String类的public boolean matches(String regex)8 *9 * 需求:10 * 判断手机号码是否满足要求?11 *12 * 分析:13 * A:键盘录入手机号码14 * B:定义手机号码的规则15 * 1343697598016 * 1368888686817 * 1386666888818 * 1345678901219 * 1312345678920 * 1891234567821 * 1888686787822 * 1863883388323 * C:调用功能,判断即可24 * D:输出结果25 */

26 public classRegexDemo {27 public static voidmain(String[] args) {28 //键盘录入手机号码

29 Scanner sc = newScanner(System.in);30 System.out.println("请输入你的手机号码:");31 String phone =sc.nextLine();32

33 //定义手机号码的规则

34 String regex = "1[38]\\d{9}";35

36 //调用功能,判断即可

37 boolean flag =phone.matches(regex);38

39 //输出结果

40 System.out.println("flag:"+flag);41 }42 }

邮箱验证案例:

1 packagecn.itcast_02;2

3 importjava.util.Scanner;4

5 /*

6 * 校验邮箱7 *8 * 分析:9 * A:键盘录入邮箱10 * B:定义邮箱的规则11 * 1517806580@qq.com12 * liuyi@163.com13 * linqingxia@126.com14 * fengqingyang@sina.com.cn15 * fqy@itcast.cn16 * C:调用功能,判断即可17 * D:输出结果18 */

19 public classRegexTest {20 public static voidmain(String[] args) {21 //键盘录入邮箱

22 Scanner sc = newScanner(System.in);23 System.out.println("请输入邮箱:");24 String email =sc.nextLine();25

26 //定义邮箱的规则27 //String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";

28 String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+";29

30 //调用功能,判断即可

31 boolean flag =email.matches(regex);32

33 //输出结果

34 System.out.println("flag:"+flag);35 }36 }

3、正则表达式的分割功能

1 packagecn.itcast_03;2

3 importjava.util.Scanner;4

5 /*

6 * 分割功能7 * String类的public String[] split(String regex)8 * 根据给定正则表达式的匹配拆分此字符串。9 *10 * 举例:11 * 百合网,世纪佳缘,珍爱网,QQ12 * 搜索好友13 * 性别:女14 * 范围:"18-24"15 *16 * age>=18 && age<=2417 */

18 public classRegexDemo {19 public static voidmain(String[] args) {20 //定义一个年龄搜索范围

21 String ages = "18-24";22

23 //定义规则

24 String regex = "-";25

26 //调用方法

27 String[] strArray =ages.split(regex);28

29 // //遍历30 //for(int x=0; x

34 //如何得到int类型的呢?

35 int startAge = Integer.parseInt(strArray[0]);36 int endAge = Integer.parseInt(strArray[1]);37

38 //键盘录入年龄

39 Scanner sc = newScanner(System.in);40 System.out.println("请输入你的年龄:");41 int age =sc.nextInt();42

43 if(age>=startAge && age<=endAge) {44 System.out.println("你就是我想找的");45 }else{46 System.out.println("不符合我的要求,gun");47 }48 }49 }

练习:

1 packagecn.itcast_03;2

3 /*

4 * 分割功能练习5 */

6 public classRegexDemo2 {7 public static voidmain(String[] args) {8 //定义一个字符串

9 String s1 = "aa,bb,cc";10 //直接分割

11 String[] str1Array = s1.split(",");12 for (int x = 0; x < str1Array.length; x++) {13 System.out.println(str1Array[x]);14 }15 System.out.println("---------------------");16

17 String s2 = "aa.bb.cc";18 String[] str2Array = s2.split("\\.");19 for (int x = 0; x < str2Array.length; x++) {20 System.out.println(str2Array[x]);21 }22 System.out.println("---------------------");23

24 String s3 = "aa bb cc";25 String[] str3Array = s3.split(" +");26 for (int x = 0; x < str3Array.length; x++) {27 System.out.println(str3Array[x]);28 }29 System.out.println("---------------------");30

31 //硬盘上的路径,我们应该用\\替代\

32 String s4 = "E:\\JavaSE\\day14\\avi";33 String[] str4Array = s4.split("\\\\");34 for (int x = 0; x < str4Array.length; x++) {35 System.out.println(str4Array[x]);36 }37 System.out.println("---------------------");38 }39 }

把字符串中的数字排序案例

1 packagecn.itcast_03;2

3 importjava.util.Arrays;4

5 /*

6 * 我有如下一个字符串:"91 27 46 38 50"7 * 请写代码实现最终输出结果是:"27 38 46 50 91"8 *9 * 分析:10 * A:定义一个字符串11 * B:把字符串进行分割,得到一个字符串数组12 * C:把字符串数组变换成int数组13 * D:对int数组排序14 * E:把排序后的int数组在组装成一个字符串15 * F:输出字符串16 */

17 public classRegexTest {18 public static voidmain(String[] args) {19 //定义一个字符串

20 String s = "91 27 46 38 50";21

22 //把字符串进行分割,得到一个字符串数组

23 String[] strArray = s.split(" ");24

25 //把字符串数组变换成int数组

26 int[] arr = new int[strArray.length];27

28 for (int x = 0; x < arr.length; x++) {29 arr[x] =Integer.parseInt(strArray[x]);30 }31

32 //对int数组排序

33 Arrays.sort(arr);34

35 //把排序后的int数组在组装成一个字符串

36 StringBuilder sb = newStringBuilder();37 for (int x = 0; x < arr.length; x++) {38 sb.append(arr[x]).append(" ");39 }40 //转化为字符串

41 String result =sb.toString().trim();42

43 //输出字符串

44 System.out.println("result:"+result);45 }46 }

4、正则表达式的替换功能

1 packagecn.itcast_04;2

3 /*

4 * 替换功能5 * String类的public String replaceAll(String regex,String replacement)6 * 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。7 */

8 public classRegexDemo {9 public static voidmain(String[] args) {10 //定义一个字符串

11 String s = "helloqq12345worldkh622112345678java";12

13 //我要去除所有的数字,用*给替换掉14 //String regex = "\\d+";15 //String regex = "\\d";16 //String ss = "*";17

18

19 //直接把数字干掉

20 String regex = "\\d+";21 String ss = "";22

23 String result =s.replaceAll(regex, ss);24 System.out.println(result);25 }26 }

5、Pattern和Matcher的概述

1 packagecn.itcast_05;2

3 importjava.util.regex.Matcher;4 importjava.util.regex.Pattern;5

6 /*

7 * 获取功能8 * Pattern和Matcher类的使用9 *10 * 模式和匹配器的基本使用顺序11 */

12 public classRegexDemo {13 public static voidmain(String[] args) {14 //模式和匹配器的典型调用顺序15 //把正则表达式编译成模式对象

16 Pattern p = Pattern.compile("a*b");17 //通过模式对象得到匹配器对象,这个时候需要的是被匹配的字符串

18 Matcher m = p.matcher("aaaaab");19 //调用匹配器对象的功能

20 boolean b =m.matches();21 System.out.println(b);22

23 //这个是判断功能,但是如果做判断,这样做就有点麻烦了,我们直接用字符串的方法做

24 String s = "aaaaab";25 String regex = "a*b";26 boolean bb =s.matches(regex);27 System.out.println(bb);28 }29 }

6、正则表达式的获取功能

1 packagecn.itcast_05;2

3 importjava.util.regex.Matcher;4 importjava.util.regex.Pattern;5

6 /*

7 * 获取功能:8 * 获取下面这个字符串中由三个字符组成的单词9 * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?10 */

11 public classRegexDemo2 {12 public static voidmain(String[] args) {13 //定义字符串

14 String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";15 //规则

16 String regex = "\\b\\w{3}\\b";17

18 //把规则编译成模式对象

19 Pattern p =Pattern.compile(regex);20 //通过模式对象得到匹配器对象

21 Matcher m =p.matcher(s);22 //调用匹配器对象的功能23 //通过find方法就是查找有没有满足条件的子串24 //public boolean find()25 //boolean flag = m.find();26 //System.out.println(flag);27 // //如何得到值呢?28 // //public String group()29 //String ss = m.group();30 //System.out.println(ss);31 //

32 // //再来一次33 //flag = m.find();34 //System.out.println(flag);35 //ss = m.group();36 //System.out.println(ss);

37

38 while(m.find()) {39 System.out.println(m.group());40 }41

42 //注意:一定要先find(),然后才能group()43 //IllegalStateException: No match found44 //String ss = m.group();45 //System.out.println(ss);

46 }47 }

7、System类中垃圾回收的方法gc()的讲解

System.gc()可用于垃圾回收。当使用System.gc()回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源。在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用Object类的finalize()方法。finalize()方法的作用是释放一个对象占用的内存空间时,会被JVM调用。而子类重写该方法,就可以清理对象占用的资源,该方法有没有链式调用,所以必须手动实现。

从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。

但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好

1 packagecn.itcast_01;2

3 public classPerson {4 privateString name;5 private intage;6

7 publicPerson() {8 super();9 }10

11 public Person(String name, intage) {12 super();13 this.name =name;14 this.age =age;15 }16

17 publicString getName() {18 returnname;19 }20

21 public voidsetName(String name) {22 this.name =name;23 }24

25 public intgetAge() {26 returnage;27 }28

29 public void setAge(intage) {30 this.age =age;31 }32

33 @Override34 publicString toString() {35 return "Person [name=" + name + ", age=" + age + "]";36 }37

38 @Override39 protected void finalize() throwsThrowable {40 System.out.println("当前的对象被回收了" + this);41 super.finalize();42 }43

44 }

1 packagecn.itcast_01;2

3 /*

4 * System类包含一些有用的类字段和方法。它不能被实例化。5 *6 * 方法:7 * public static void gc():运行垃圾回收器。8 * public static void exit(int status)9 * public static long currentTimeMillis()10 * public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)11 */

12 public classSystemDemo {13 public static voidmain(String[] args) {14 Person p = new Person("赵雅芝", 60);15 System.out.println(p);16

17 p = null; //让p不再指定堆内存

18 System.gc();19 }20 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值