Java正则表达式的简单使用

1. 正则表达式创建祖成规则

在这里插入图片描述

2. String类中的3个和正则表达式相关的方法

  1. boolean matches(String regex) :
    判断当前字符串是否和参数正则表达式匹配

  2. String[] split(String regex) :
    使用指定的正则表达式切割当前字符串

  3. String replaceAll(String regex, String newStr) :
    将调用者字符串中的所有匹配regex正则的子串,全部替换成newStr新串

  • public boolean matches(String regex) 方法的使用
package cn.king.demo01;
import java.util.Scanner;

/*
 * public boolean matches(String regex):
 * 判断当前字符串是否和参数正则表达式匹配。
 */

/**
 * 使用正则表达式校验qq号码:
 * 1、要求必须是5-15位数字
 * 2、0不能开头
 * 
 * 分析:
 * a:键盘录入一个qq
 * b:写一个功能校验qq
 * c:调用功能输出结果
 */
public class Demo01 {
    public static void main(String[] args) {
        System.out.println("输入QQ: ");
        String qq = new Scanner(System.in).nextLine();
        System.out.println(checkQQ(qq));
    }

    public static boolean checkQQ(String qq) {
        return qq.matches("[1-9][0-9]{4,14}");
    }
}

/*
 * 同理, 校验手机号只需要更换正则表达式即可,
 * String regexForPhone="1[38]\\d{9}";
 * 同理, 校验邮箱只需要更换正则表达式即可,
 * String regexForMail = "\\w+@\\w{2,6}(\\.\\w{2,3})+";
 */
  • public String[] split(String regex) 方法的使用
package cn.king.demo01;
/**
 * public String[] split(String regex):
 * 使用指定的正则表达式切割当前字符串。
 */
public class Demo02 {
    public static void main(String[] args) {
        String s1 = "aa,bb,cc";
        // 将字符串按照逗号分隔, 分隔出的每一部分都放到字符串数组中
        String[] str1Array = s1.split(",");
        for (int x = 0; x < str1Array.length; x++) {
            System.out.println(str1Array[x]);
        }
        System.out.println("---------------------");

        // 将字符串按照点分隔, 分隔出的每一部分都放到字符串数组中
        String s2 = "aa.bb.cc";
        String[] str2Array = s2.split("\\.");
        for (String item : str2Array) {
            System.out.println(item);
        }
        System.out.println("---------------------");

        String s3 = "aa    bb                cc";
        // 将字符串按照点分隔, 分隔出的每一部分都放到字符串数组中
        String[] str3Array = s3.split(" +");
        for (String value : str3Array) {
            System.out.println(value);
        }
        System.out.println("---------------------");

        // 硬盘上的路径,我们应该用\\替代\
        String s4 = "E:\\JavaSE\\day14\\avi";
        // 将字符串按照\\分隔, 分隔出的每一部分都放到字符串数组中
        String[] str4Array = s4.split("\\\\");
        for (String s : str4Array) {
            System.out.println(s);
        }
        System.out.println("---------------------");
    }
}
package cn.king.demo01;
import java.util.Arrays;

/*
 * 我有如下一个字符串:"91 27 46 38 50"
 * 请写代码实现最终输出结果是:"27 38 46 50 91"
 *
 * 分析:
 * 		A:定义一个字符串
 * 		B:把字符串进行分割,得到一个字符串数组
 * 		C:把字符串数组变换成int数组
 * 		D:对int数组排序
 * 		E:把排序后的int数组在组装成一个字符串
 * 		F:输出字符串
 */
public class Demo03 {
    public static void main(String[] args) {
        // 定义一个字符串
        String s = "91 27 46 38 50";

        // 把字符串进行分割,得到一个字符串数组
        String[] strArray = s.split(" ");

        // 把字符串数组变换成int数组
        int[] arr = new int[strArray.length];

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

        // 对int数组排序
        Arrays.sort(arr);

        // 把排序后的int数组在组装成一个字符串
        StringBuilder sb = new StringBuilder();
        for (int x = 0; x < arr.length; x++) {
            sb.append(arr[x]).append(" ");
        }
        //转化为字符串
        String result = sb.toString().trim();

        //输出字符串
        System.out.println("result:" + result);
    }
}
  • String replaceAll(String regex, String newStr) 方法的使用
package cn.king.demo01;
/**
 * String replaceAll(String regex, String newStr) :
 * 将调用者字符串中的所有匹配regex正则的子串,全部替换成newStr新串
 */
public class Demo04 {
    public static void main(String[] args) {
        String s = "helloqq12345worldkh622112345678java";

        // 使用"*"替换所有的数字. 
        // 输出: helloqq*worldkh*java
        System.out.println(s.replaceAll("\\d+", "*"));
        // 输出: helloqq*****worldkh************java
        System.out.println(s.replaceAll("\\d","*")); 

        // 直接把数字删除. 使用空字符串替换数字即可.
        String result = s.replaceAll("\\d+", "");
        System.out.println(result);
    }
}

3. 正则中Pattern类和Matcher类的简单使用

  • Pattern类的概述
    正则表达式的编译表示形式。就是将正则表达式封装成的对象。该类仅仅代表将正则表达式封装成的对象。
    正则表达式实际上是一个特殊的字符串,通过此类最后要将那个字符串封装正则表达式对象。
    该类是final修饰不能有子类父类是Object.
  • Pattern类的功能
    public static Pattern compile(String regex):
    将给定的正则表达式字符串封装成正则表达式对象。
    public Matcher matcher(CharSequence input):
    创建匹配给定参数与此正则表达式的匹配器。 String类实现了CharSequence 接口.
package cn.king.demo01;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo05 {
    public static void main(String[] args) {
        // 1. 获取正则表达式对象
        String regex = "a*b";
        Pattern pattern = Pattern.compile(regex);
        // 2. 通过正则表达式对象获取匹配器对象, 参数是我们要操作的数据
        Matcher matcher = pattern.matcher("aaaaab");
        // 3. 调用匹配器对象的匹配功能,对字符串进行操作
        boolean b = matcher.matches();
        System.out.println(b);

        // 上面是Pattern(模式,即正则表达式对象)和Matcher(匹配器)的基本使用顺序.

        /*
         * 上面的功能是使用正则表达式的判断功能,
         * 即判断某字符串是否匹配给定的正则表达式.
         * 如果是做判断,上面的代码就麻烦了,
         * 我们直接使用String的public boolean matches(String regex)方法即可.
         * 如下两行:
         */
        boolean b1 = "aaaaab".matches("a*b");
        System.out.println(b1);
    }

}

/*
 * 正则表达式的使用步骤:
 * 1. 将正则表达式字符串封装成正则表达式对象即 Pattern 对象.
 * 2. 用 Pattern 对象获得匹配器 Matcher 对象
 * 3. 用匹配器 Matcher 对象结合正则对象来操作(匹配)要被操作的字符串
 * 4. 操作(匹配)完的结果都在匹配器中
 */

/*
 * Matcher类的功能:
 * public boolean matches(): 判断字符串和正则是否匹配。
 * public boolean find(): 查找存不存在符合正则的子串。
 * public String group(): 获取查找的符合正则的子串。
 */
package cn.king.demo01;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
 * 获取功能:
 * 获取下面这个字符串中由三个字符组成的单词
 * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
 */
public class Demo06 {
    public static void main(String[] args) {
        // 定义字符串
        String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
        // 规则
        String regex = "\\b\\w{3}\\b";
        // 把规则编译成模式对象
        Pattern p = Pattern.compile(regex);
        // 通过模式对象得到匹配器对象
        Matcher m = p.matcher(s);
        // 调用匹配器对象的功能
        // 通过find方法就是查找有没有满足条件的子串
        while (m.find()) { // 判断是否有匹配正则的字串
            // 取出匹配正则的字串
            System.out.println(m.group());
        }
        // 注意:一定要先find(),然后才能group()
    }
}
package cn.king.demo01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
// 超级简易爬虫
// 功能: 获取某网页上所有的URL装到List集合中
public class Demo {
    public static void main(String[] args) throws IOException {
        List<String> UrlList = getByWeb();
        for (String url : UrlList) {
            System.out.println(url);
        }
    }

    public static List<String> getByWeb() throws IOException {
        //1、得到网页输入流
        URL url = new URL("http://win7.wanming01.cn");
        BufferedReader bufferedReader =
                new BufferedReader(new InputStreamReader(url.openStream()));
        //2、对读取的数据进行规则的匹配。从中获取符合规则的数据
        // String regex="\\w+@\\w+(\\.\\w+)+";
        String regex = "(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";
        Pattern pattern = Pattern.compile(regex);
        List<String> list = new ArrayList<>();
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            Matcher matcher = pattern.matcher(line);
            while (matcher.find()) { // 判断是否有符合正则的字符串
                // 将符合规则的子串取出后储存到集合中
                list.add(matcher.group());
            }
        }
        return list;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值