JavaSE学习总结(十)常用类(下)/正则表达式/Math/Random/System/BigDecimal/Date/SimpleDateFormat/Calendar/BigInteger

常用类(下)

一、正则表达式

(一)概述

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

先举个例子来理解正则表达式:

案例演示
需求:校验qq号码.
1:要求必须是5-15位数字
2:0不能开头

import java.util.Scanner;

public class MyTest {
   
    public static void main(String[] args) {
   
        String regex="[1-9][0-9]{4,14}";//QQ号码的正则表达式
        Scanner sc = new Scanner(System.in);
        System.out.println("注册——请输入符合规则的QQ号码:");
        String s = sc.nextLine();
        boolean matches = s.matches(regex);//判断此字符串是否匹配给定的正则表达式
        if(matches){
   
            System.out.println("输入的QQ号码符合规则");
        }else{
   
            System.out.println("输入的QQ号码不符合规则");
        }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)正则表达式的组成规则

以下规则字符在java.util.regex.Pattern类中

1.字符

x 即字符 x。举例:‘a’表示字符a
\\ 反斜线字符。
\n 新行(换行)符 (’\u000A’)
\r 回车符 (’\u000D’)

2.字符类

[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A到 Z,两头的字母也包括在内
[0-9] 0到9的字符都包括

3.预定义字符类

. 即任何字符。
那么.字符本身,怎么表示呢? \.
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]包括下划线

4.边界匹配器

^ 行的开头
$ 行的结尾
\b 单词边界
就是不是单词字符的地方。
举例:hello world?haha;xixi (空格问号分号都是单词边界)

5.Greedy 数量词

X? X出现一次或一次也没有 比如""空串 就是没有
X* X出现零次或多次 (大于等于1次 都算多次)
X+ X出现一次或多次
X{n} X出现恰好 n 次
X{n,} X出现至少 n 次
X{n,m} X出现至少 n 次,但是不超过 m 次

案例演示

public class MyTest1 {
   
    public static void main(String[] args) {
   
        String regex = "a";
        regex = "[abcdef]"; //允许出现列表中的某一个字符
        regex = "[a-z]";//允许出现26个小写字母的任意一个
        regex = "[A-Za-z]";//允许出现大小写字母任意一个
        regex = "[0-9]";//允许出现0-9任意一个
        regex = "[a-zA-Z0-9]";//允许出现大小写字母或0-9任意一个
        regex = "[^0-9]"; //^不允许出现列表中的任意一个
        regex = ".";//通配单个任意字符
        regex = "\\.";//   \\转义字符   \\.这个意思就是匹配点.本身
        regex = "\\|"; //由于|本身代表或的意思,因此需要转义
        regex = "\\d";//跟[0-9]意思一样
        regex = "\\w";//跟[a-zA-Z_0-9]意思一样
        regex = "[a-z]+"; // +可以出现一个或多个
        regex = "a?"; //一次或一次也没有 比如 "" 空串 就是没有
        regex = "[a-z]*";//零次或多次  (大于等于1次 都算多次)
        regex = "[a-z]{6}";//a-z正好6个
        regex = "[0-9]{6,}";//0-9的数至少6个
        regex = "[0-9]{6,16}";//0-9的数大于等于6个小于等于16个
        boolean flag = "123499988766454343".matches(regex);
        System.out.println(flag);
    }
}

在这里插入图片描述

(三)正则表达式的判断功能

public boolean matches(String regex)判断此字符串是否匹配给定的正则表达式

案例演示

import java.util.Scanner;

public class MyTest {
   
    public static void main(String[] args) {
   
        String regex="[1][3|5|6|7|8|9][0-9]{9}";
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入手机号码:");
        String s = sc.nextLine();
        boolean matches = s.matches(regex);//判断此字符串是否匹配给定的正则表达式
        if(matches){
   
            System.out.println("输入的手机号码符合规则");
        }else{
   
            System.out.println("输入的手机号码不符合规则");
        }
    }
}

在这里插入图片描述
在这里插入图片描述

(四)正则表达式的分割功能

String类的功能:public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。

案例演示1
有一个由个人信息组成的字符串,需要提取其中的有效信息。

public class MyTest {
   
    public static void main(String[] args) {
   
        String s="张三==23==男";
        String regex="==";
        String[] a = s.split(regex);
        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
    }
}

在这里插入图片描述
案例演示2
需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”

分析:

  • a: 定义目标字符串"91 27 46 38 50"
  • b: 对这个字符串进行切割,得到的就是一个字符串数组
  • c: 把b中的字符串数组转换成int类型的数组
    (1): 定义一个int类型的数组,数组的长度就是字符串数组长度
    (2): 遍历字符串数组,获取每一个元素.将其转换成int类型的数据
    (3): 把int类型的数据添加到int类型的数组的指定位置
  • d: 排序
  • e: 创建一个StringBuilder对象,用来记录拼接的结果
  • f: 遍历int类型的数组, 将其每一个元素添加到StringBuilder对象中
  • g: 就是把StringBuilder转换成String
  • h: 输出
import java.util.Arrays;

public class MyTest {
   
    public static void main(String[] args) {
   
        String s="91 27 46 38 50";
        String regex=" ";
        String[] a = s.split(regex);
        int[] b=new int[a.length];
        for (int i = 0; i < a.length; i++) {
   
            b[i]=Integer.parseInt(a[i]);
        }
        Arrays.sort(b);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < b.length; i++) {
   
            sb.append(b[i]).append(" ");
        }
        String s1 = sb.toString();
        String s2 = s1.trim();//去掉右边的空格
        System.out.println(s2);
    }
}

在这里插入图片描述
案例演示3
去除数组中的重复元素

import java.util.Arrays;

public class MyTest {
   
    public static void main(String[] args) {
   
        int[] arr = {
   10, 50, 60, 70, 80, 90, 100, 10, 50, 60, 70, 80, 90, 100, 10, 50, 60, 70, 80, 90, 100};
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
   
            if(sb.indexOf(String.valueOf(arr[i]))==-1){
   
                sb.append(arr[i]).append(" ");
            }
        }
        String regex=" ";
        String s = sb.toString();
        String[] split = s.split(regex);
        int[] a=new int[split.length];
        for (int i = 0; i < split.length; i++) {
   
            a[i]=Integer.parseInt(split[i]);
        }
        System.out.println(Arrays.toString(a));
    }
}

在这里插入图片描述
案例演示4
给数组中添加一个元素

import java.util.Arrays;

public class MyTest {
   
    public static void main(String[] args
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值