Java学习笔记(18)

 替换     replaceAll(String regex, String replacement)

package cn.itcast.regex;

import java.util.Arrays;

/*
 
 匹配    matches()
 
 切割    split()
 
         看有多少组就看有多少对括号,依次从左往右的每一对括号就为第几组
         ((A)(B(C)))
         第一组:((A)(B(C)))
         第二组:(A)
         第三组:(B(C))
         第四组:(C)
     1    引用第一组所匹配到的内容
     
 替换    replaceAll(String regex, String replacement)
 
 查找
 */
public class Demo3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //需求:编写一个正则表达式匹配一个手机号
        /*matchesPhone("13835026666");
        matchesTel("020-38325125");
        testSplit1();
        testSplit2();*/
        replaceTest1();
        replaceTest2();
    }
    public static void matchesPhone(String phone) {
        //String reg="1[34578]\d{9}";
        System.out.println(phone.matches("1[34578]\d{9}")?"合法手机号":"非法手机号");
    }
    //需求2:匹配固定电话
    public static void matchesTel(String tel) {
        System.out.println(tel.matches("0\d{2,3}-[1-9]\d{6,7}")?"合法固话":"非法固话");
    }
    //按照空格切割
    public static void testSplit1() {
        String str="明          天           放    假";
        String[] datas=str.split(" +");
        System.out.println("数组的元素:"+Arrays.toString(datas));
    }
    //根绝重叠词进行切割
    public static void testSplit2() {
        String str="大家家家明天天玩得得得得得得得得得得得开心";
        String[] datas=str.split("(.)\1+");//如果正则的内容需要被复用,那么需要对正则的内容进行分组。分组的目的就是为了提高正则的复用性。组号不能指定,组号是从1开始
        System.out.println("数组的元素:"+Arrays.toString(datas));
    }
    
    //替换
    public static void replaceTest1() {
        String str="如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126如果需求请联系我13556082126";
        String reg="1[34578]\d{9}";
        str=str.replaceAll(reg, "****");
        System.out.println("被替换的内容是:"+str);
    }
    
    public static void replaceTest2() {
        String str="我我我要要要做做做项项项项项项目目";//还愿结巴的话--------->我要做项目        把重叠词替换成单个单词
        str=str.replaceAll("(.)\1+", "$1");//如果需要在replaceAll方法正则的外部引用组的内容,那么是使用    "$组号"
        System.out.println(str);
    }
}

结果:
被替换的内容是:如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****如果需求请联系我****
我要做项目

查找  

查找
查找需要使用的对象:
1.Pattern(正则对象)
2.Matcher(匹配器对象)
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。
执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

因此,典型的调用顺序是

Pattern p = Pattern.compile("正则");
Matcher m = p.matcher("字符串");
boolean b = m.matches();

匹配器要使用到的方法
1.find() 通知匹配器去匹配字符串,查找符合规则的字符串,如果能查找到符合规则的字符串,则返回true,否则返回false
2.group() 获取符合规则的字串

注意:使用group方法的时候一定要先调用find方法让匹配器去查找符合规则的字符串,否则报错

单词边界匹配器
 单词边界匹配器只是代表了单词的开始或者是结束部分,不匹配任何的字符

和空格什么的字符不一样

public class Demo5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("hello world".matches("hello\b world"));
    }

}

结果:
true
package cn.itcast.regex;

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

/*
 
 查找
     查找需要使用的对象:
         1.Pattern(正则对象)
         2.Matcher(匹配器对象)
         指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。
         执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
         
 因此,典型的调用顺序是

     Pattern p = Pattern.compile("正则");
     Matcher m = p.matcher("字符串");
     boolean b = m.matches();        
         
匹配器要使用到的方法
    1.find()        通知匹配器去匹配字符串,查找符合规则的字符串,如果能查找到符合规则的字符串,则返回true,否则返回false
    2.group()        获取符合规则的字串
    
注意:使用group方法的时候一定要先调用find方法让匹配器去查找符合规则的字符串,否则报错
 */
public class Demo4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //找出三个字母组成的单词
        String content="da jia de jia qi wan bi liao hai kai xin ma";
        String reg="\b[a-zA-Z]{3}\b";
        //先要把字符串的正则编译成Pattern对象
        Pattern p=Pattern.compile(reg);
        //使用正则对象匹配字符串用于产生一个Matcher对象
        Matcher m=p.matcher(content);
        
        /*System.out.println("有符合规则的字符串吗?"+m.find());
        System.out.println("获取结果:"+m.group());*/
        
        while (m.find()) {
            System.out.println(m.group());
        }
    }

}

结果:
jia
jia
wan
hai
kai
xin

在正则中,想要匹配一个点(.)的话,必须使用.来匹配。再使用反斜杠,就是\.

原文地址:https://www.cnblogs.com/zhangwugai/p/10812325.html