2020.8.2正则表达式

01_正则表达式

01.1_定义:就是,描述这些规则的语法

正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式方法中应用,才能实现对字符串的匹配、查找、替换及分割等操作。

案例演示:用非正则表达式实现

package RegxDemo01;

import java.util.Scanner;

//正则表达式
public class RegxTest01 {
    public static void main(String[] args) {
       /* 校验qq号码.
        1:要求必须是5-15位数字
        2:0不能开头*/
       //非正则表达式实现
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入qq号");
        String qqnum=scanner.nextLine();
       //调用校验方法
        boolean check=checkQQnum(qqnum);
        if(check)
            System.out.println("输入正确");
        else
            System.out.println("输入错误");
    }

    private static boolean checkQQnum(String qqnum) {
        //定以规则
        boolean check=false;
        if(qqnum.length()>=5&&qqnum.length()<=15&&!qqnum.startsWith("0")){
            //判断每一位字符
            for (int i = 0; i < qqnum.length(); i++) {
                char ch=qqnum.charAt(i);
                if(!Character.isDigit(ch)){//确定指定字符是否为数字。
                    check=true;
                    break;
                }else{
                   check=true;
                }
            }
        }
        return check;//如果第一个条件满足不了,直接返回false
    }
}

使用正则表达式

package RegxDemo01;

import java.util.Scanner;

//正则表达式
public class Refxtest01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入qq号");
        String qqnum=scanner.nextLine();
        //调用校验方法
        boolean check=checkQQnum(qqnum);
        if(check)
            System.out.println("输入正确");
        else
            System.out.println("输入错误");
    }

    private static boolean checkQQnum(String qqnum) {
        //用正则表达式表示
        String regx="[1-9][0-9]{4,14}";
        boolean b=qqnum.matches(regx);
        return b;
    }

}

01.3_案例演示2

非正则表达式

package RegxDemo01;

import java.util.Scanner;

public class RegxTest02 {
    public static void main(String[] args) {
        //校验手机号的规则
        // 手机号 11 位 第一位是 1 第二位 3 5 7 8  其余位随意数字 手机号每一位都是数字。

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入的你的手机号");
        String phoneNumber = sc.nextLine();
        boolean flag = checkphoneNumber(phoneNumber);
        if (flag) {
            System.out.println("手机号规则正确");
        } else {
            System.out.println("手机号规则错误");
        }
    }

    private static boolean checkphoneNumber(String phoneNumber) {
        boolean flag = false;
        if (phoneNumber.length() == 11 && phoneNumber.startsWith("13") || phoneNumber.startsWith("15") || phoneNumber.startsWith("17") || phoneNumber.startsWith("18")) {
            for (int i = 2; i < phoneNumber.length(); i++) {
                char ch = phoneNumber.charAt(i);
                if (!Character.isDigit(ch)) {
                    flag = false;
                    break;
                } else {
                    flag = true;
                }
            }

        }
        return flag;
    }
}

正则表达式

package RegxDemo01;

import java.util.Scanner;

//正则表达式,手机号案例
public class Regextest02 {
    public static void main(String[] args) {
        //校验手机号的规则
        // 手机号 11 位 第一位是 1 第二位 3 5 7 8  其余位随意数字 手机号每一位都是数字。
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入qq号");
        String qqnum=scanner.nextLine();
        //调用校验方法
        boolean check=checkQQnum(qqnum);
        if(check)
            System.out.println("输入正确");
        else
            System.out.println("输入错误");
    }

    private static boolean checkQQnum(String qqnum) {
        String Regex="[1][3578][0-9]{9}";
        boolean b=qqnum.matches(Regex);
        return b;
    }
}

01.4_正则表达式的组成规则

规则字符在java.util.regex Pattern类中
字符
	x 字符 x。举例:'a'表示字符a
	\\ 反斜线字符。
	\n 新行(换行)符 ('\u000A') 
	\r 回车符 ('\u000D')
字符类
	[abc] a、b 或 c(简单类) 
	[^abc] 任何字符,除了 a、b 或 c(否定) 
	[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) 
	[0-9] 0到9的字符都包括
预定义字符类
	. 任何字符。我的就是.字符本身,怎么表示呢? \.
	\d 数字:[0-9]
	\w 单词字符:[a-zA-Z_0-9]
		在正则表达式里面组成单词的东西必须有这些东西组成
	\s 匹配空格字符	
边界匹配器
	^ 行的开头 
	$ 行的结尾 
	\b 单词边界
		就是不是单词字符的地方。
		举例:hello world?haha;xixi
Greedy 数量词 
	X? X,一次或一次也没有 比如""空串 就是没有
	X* X,零次或多次  大于等于1次 都算多次
	X+ X,一次或多次
	X{n} X,恰好 n 次 
	X{n,} X,至少 n 次 
	X{n,m} X,至少 n 次,但是不超过 m 次 

01.5_正则表达式的分割功能

String类的功能:public String[] split(String regex)

package RegxDemo01;

import java.util.Arrays;

//正则表达式分割功能
public class Regectest06 {
    public static void main(String[] args) {
        String str="输入=你要=搜索的=内容";
        //得到一句在这里输入你要搜索的内容,对字符串进行截取
        //方法1含头不含尾
        String get=str.substring(0,str.indexOf("="));
        System.out.print(get);
        String get1=str.substring(str.indexOf("=")+1,str.indexOf("搜")-1);
        System.out.print(get1);
        String get2=str.substring(str.indexOf("搜"),str.lastIndexOf("="));
        System.out.print(get2);
        String get3=str.substring(str.lastIndexOf("=")+1);
        System.out.print(get3);//输入你要搜索的内容
        System.out.println("------------------------------------");
        //方法2根据正则来切割这个字符串,返回的是一个字符串数组。
        String[] split = str.split("=");
        System.out.print(split[0]);
        System.out.print(split[1]);
        System.out.print(split[2]);
        System.out.print(split[3]);
        System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
        String names2 = "张三assdfa=12542242assadfafasdf2411李四asdfdadsf25244=asdfasdf25411王五";
        //截取字母
        String[] split1 = names2.split("[a-z=0-9]+");//地址
        System.out.print(split1[0]);
        System.out.print(split1[1]);
        System.out.print(split1[2]);
    }
}

01.6_把给定字符串中的数字排序

package RegxDemo01;

import java.util.Arrays;

//正则表达式分割功能
public class Regectest06 {
    public static void main(String[] args) {
         /* A:
                案例演示:
                需求:我有如下一个字符串:”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:
         * f: 遍历int类型的数组, 将其每一个元素添加到StringBuilder对象中
         * g: 就是把StringBuilder转换成String
         * h: 输出
        */
         String str1="91 27 46 38 50";
        String[] split2 = str1.split("\\s+");//\s匹配空格字符
        System.out.println(Arrays.toString(split2));//[91, 27, 46, 38, 50]
        //定义一个int数组
        int[] arr = new int[split2.length];
        //遍历字符串
        for (int i = 0; i < arr.length; i++) {
            //转换为int类型的数据
            arr[i] = Integer.parseInt(split2[i]);
        }
        //排序int数组
        Arrays.sort(arr);//  对指定的 int 型数组按数字升序进行排序。
        System.out.println(Arrays.toString(arr));//[27, 38, 46, 50, 91]
        //创建一个StringBuilder对象,用来记录拼接的结果
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < arr.length; i++) {
            stringBuffer.append(arr[i]).append(" ");
        }
        System.out.println(stringBuffer.toString().trim());//去掉首尾空格27 38 46 50 91


    }


}

01.7_正则表达式的替换功能

​ String类的功能:public String replaceAll(String regex,String replacement)

  /* A:
正则表达式的替换功能
String类的功能:public String replaceAll (String regex, String replacement)*/
String str2="225222asdfa你22222222好asdfassdfhahehhasd阿斯顿asdf发放阿asdfasdf斯顿发顺丰啊手动阀dssdfsdfsfd124574544";
//保留上面字符串中的中文字符
String s = str2.replaceAll("[a-z0-9]", "");
System.out.println(s);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值