day03-String正则表达式

版权声明:来自等待or进取的博客 https://blog.csdn.net/qq_39466683/article/details/82424911

目录

正则表达式

作业:


正则表达式

  1. 定义:一组特殊的字符,来描述一个字符串格式;对字符串进行复杂的操作(查找,替换,匹配)。
  2. 特点:不关心内容是否有效,只关注格式是否匹配。
  3. 作用:匹配字符串是否满足给定格式。
  4. 字符集合:     []                     表示一个字符
                           [123]               表示1,2,3中的任意一个字符
                           [0-9]                表示0-9之间的任意一个字符
                           [^123]              表示除了1,2,3的任意一个字符
                           [a-z&&[^i-o]]    表示a-z之间的任意一个字符除了i-o之间的任意一个字符 
                           [a-d[m-p]]        表示a到d或m到p:[a-dm-p](并集)
  5. 数量词:         X?               表示0个或1个
                           X*                表示0个或任意多个 
                           X+               表示大于等于1个
                           X{n}             表示n个
                           X{n,}            表示大于等于n
                           X{n,m}         表示n到m个
  6. 预定义字符集:       .              任意一个字符
                                    \d           任意一个数字字符,相当于[0-9]
                                    \w          单词字符,相当于[a-zA-Z]
                                    \s           空白字符,相当于[\t\n\x0B\f\r]
                                    \D          非数字字符
                                    \W         非单词字符
                                    \S          非空白字符
  7. 分组"()":
          ()圆括号表示分组,可以将一系列正则表达式看做一个整体,分组时可以使用"|"表示或"关系"。
  8. ^匹配输入字符串开始的位置。 $匹配输入字符串结尾的位置。
  9. 方法:①matches(String regex):
                  

                  告知此字符串是否匹配给定的正则表达式

                  调用此方法的 str.matches(regex) 形式与Pattern.matches(regex, str)表达式产生的结果完全相同。

    //		[email protected]
    //		[0-9a-zA-Z_]+@[0-9a-z-A-Z]+(\.[a-zA-Z]+)+
    //		\w+@\w+(\.[a-zA-Z]+)+
    		/*
    		 * 该方法是匹配目标字符串是否符合给定的格式要求
    		 * 
    		 * matches(String regex);boolean
    		 * 当前方法是全匹配,不加^和$,方法内部自动添加
    		 */
    		String regex = "^\\w+@\\w+(\\.[a-zA-Z]+)+$";//格式
    		System.out.println(regex);
    		
    		String mail = "[email protected]";
    		boolean b = mail.matches(regex);
    		System.out.println(b);
    
    //		www.baidu.com
    //		[w]{3}\.\w+(\.[a-zA-Z]+)+
    		regex = "[w]{3}\\.\\w+(\\.[a-zA-Z]+)+";
    		String edge = "www.dsa.edu.cn";
    		b = edge.matches(regex);
    		System.out.println(b);
    
    //		身份证号
    //		\d{15}(\d{2}[0-9Xx])?
    //		^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
    //		^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$
    /*		^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|
    		(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$
    */
    		regex = "\\d{15}(\\d{2}[0-9Xx])?";
    		String id = "12346218970212345X";
    		b = id.matches(regex);
    		System.out.println(b);
    		
    		//根据符号才拆分时,连续出现该符号(该字符出现的位置在开头和中间),拆分后的结果是空字符
    		String str1 = ",,,,,,,a,t,,,,,,,,,,s,d,f,g,h,,,,,,,,,,,,";
    		String regex1 = ",";//根据逗号拆,返回string类型的数组
    		String[] arr = str1.split(regex1);
    		System.out.println(Arrays.toString(arr));

              ②split(String regex):
     

                  根据给定正则表达式的匹配拆分此字符串。

                  该方法的作用就像是使用给定的表达式和限制参数0来调用两参数split方法。因此,所得数组中不包括结尾空字符串。
     

    /*
    		 * 根据给定的字符格式来解析字符串
    		 * split(String regex);String[]
    		 */
    		String str2 = ",,,,dfe,fgre,ght,hyt,g,,,,,gertgtr,,,,,,,";
    		String regex2 = ",";
    //		匹配不到的话,返回原字符串
    //		String regex3 = "-";
    		String[] s = str2.split(regex2);
    		System.out.println(s.length);
    		for(int i = 0;i <s.length;i++) {
    			System.out.println(s[i]);
    		}
    
    /*JDK里面的例子*/
            String str3 = "boo:and:foo";
    		String regex3 = "o";//":"
    		String[] s1 = str3.split(regex3);
    		System.out.println(Arrays.toString(s1));
    		for(int i = 0;i <s1.length;i++) {
    			System.out.println(s1[i]);
    		}

    replaceAll(String regex, String replacement):
        使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
     

    package day03;
    
    import java.util.Scanner;
    
    public class Demo2 {
    
    	public static void main(String[] args) {
    		/*
    		 * 将字符串中满足格式要求的部分内容进行替换
    		 * replaceAll(String regex,String str);String
    		 */
    		String str = "123asdf123asdf123asdf";
    		str = str.replaceAll("\\d", "#");
    		System.out.println(str);
    		
    		System.out.println("请输入一串汉字");
    		Scanner scn = new Scanner(System.in);
    		String str1 = scn.next();
    		str1 = str1.replaceAll("[啊哦呵哼切]", "hi");
    		System.out.println(str1);
    	}
    }
    

    作业:

  1. 编写RegExUtils类,提供静态方法实现对身份证号码、邮政编码、手机号码的合法性校验
    package day03;
    
    import java.util.Scanner;
    
    public class Zuoye {
    //第一题
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner snc = new Scanner(System.in);
    		System.out.println("请输入身份证号:");
    		String str = snc.next();
    		System.out.println(Zuoye.testId(str));
    		
    		System.out.println("请输入邮政编码:");
    		String str1 = snc.next();
    		System.out.println(Zuoye.testPostal(str1));
    		
    		System.out.println("请输入手机号:");
    		String str2 = snc.next();
    		System.out.println(Zuoye.testNum(str2));
    	}
    	
    	public static boolean testId(String str) {
    		String regex = "\\d{15}(\\d{2}[0-9Xx])?";
    		if(str.matches(regex)) {
    			return true;
    		}else {
    			return false;
    		}
    	}
    	public static boolean testPostal(String str) {
    		String regex = "\\d{6}";
    		if(str.matches(regex)) {
    			return true;
    		}else {
    			return false;
    		}
    	}
    	public  static boolean testNum(String str) {
    		String regex = "\\d{11}";
    		if(str.matches(regex)) {
    			return true;
    		}else {
    			return false;
    		}
    	}
    }
    
  2. 重写员工类(Emp)的equals和toString方法:

    在面向对象的课程中,我们曾使用过Emp类,本案例要求重写Emp类的toString方法和equals方法,详细要求如下:

    1),重写Emp类的toString方法,返回Emp对象的名字、年龄、性别和工资信息,例如:张三,23,男,5000。

    2),重写Emp类的equals方法,两个Emp引用变量相等的条件是名字相等。

    package day03;
    
    public class Zuoye1 {
    	//第二题
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Zuoye1 z =new Zuoye1("sen",3,"male",4785);
    		Zuoye1 z1 =new Zuoye1("bao",4,"famale",8967);
    		System.out.println(z.toString());
    		System.out.println(z.equals(z1));
    	}
    	private String name;
    	private int age;
    	private String sex;
    	private int salary;
    	public Zuoye1(String name, int age, String sex, int salary) {
    		this.name = name;
    		this.age = age;
    		this.sex = sex;
    		this.salary = salary;
    	}
    	public String toString() {
    		return "name:" + name + "\nage:"+ age + "\nsex:"+ sex + "\nsalary:" + salary;
    	}
    	public boolean equals(Zuoye1 z) {
    		return (z.name).equals(name);
    	}
    }
    


     

  3. 输入数字字符串,转换为整数或浮点数:
    用户从控制台接收一个字符串,通过程序判断该字符串是整数,还是小数。如果既不是整数也不是小数,程序输出“数字格式不正确”。
    package day03;
    
    import java.util.Scanner;
    
    public class Zuoye2 {
    //第三题
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    //		ctrl + shift + o
    		Scanner scn = new Scanner(System.in);
    		System.out.println("请输入一个数字:");
    		String str = scn.next();
    		String regex = "\\d+([.]?\\d+)?";
    		if(str.matches(regex)) {
    			String[] arr = str.split("\\.");
    			if(arr.length==2) {
    				System.out.println(str + "是小数");
    			}else {
    				System.out.println(str + "是整数");
    			}
    			
    		}else {
    			System.out.println("数字格式不正确");
    		}
    	}
    
    }
    

猜你喜欢

转载自blog.csdn.net/qq_39466683/article/details/82424911