正则表达式

一个作业:

       首先输入学生人数,循环输入班级的学生信息,然后放入Student数组中,并打印所有姓"zhang"的学生信息。

       要求:姓名用拼音,不要用汉字。学生所有信息用String格式输入,中间用逗号隔开。其中,学生信息有:学号、姓名、年龄        提示: 需要查询String类中的split()方法进行字符串的拆分,实参传递逗号 (",")即可。

 

思路:

       1.写一个学生类;包含学号、姓名、年龄

       2. 写测试类

2.1 提示用户键盘上输入学生人数,并且记录变量;

2.2 使用循环把键盘上输入的所有学生信息,放入Student[ ] 数组中;

2.3 打印所有学生中姓 "zhang"的学生信息。

代码:

1.Student类

package com.monkey1039;

public class Student {
    
    
    private int id;
    private String name;
    private int age;
    
    
    public Student() {
        super();
    }
    public Student(int id, String name, int age) {
        super();
         setId(id);
         setName(name);
         setAge(age);
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        if(id>0)
        this.id = id;
        else
            System.out.println("id不能小于0.......");
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if(age>0 && age<150)
        this.age = age;
        else
            System.out.println("age值只能在[0,150)的区间内.....");
        
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + id;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (age != other.age)
            return false;
        if (id != other.id)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    
    
    

}

 

 2.

package com.monkey1039;

import java.util.Scanner;

public class Test {

     
    public static void main(String[] args) {
        // 1.提示用户在键盘输入学生的人数,并且使用变量记录
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生的人数: ");
        int num = sc.nextInt();    //明确了循环次数
        
        // 2.使用循环输入所有的学生信息,放入Student[]数组中
              Student[] st= new Student[num];
                      for(int i =0;i<num;i++) {
                          System.out.println("请输入第"+(i+1)+"个学生的信息(学号,姓名,年龄):");
                          String str = sc.next();
                          
                          //按照逗号进行字符串的拆分,得到字符串的数组
                          String[] ss = str.split(",");
                          //将每个学生的信息构造出一个学生的对象,然后放入学生数组
                          st[i] = new Student(Integer.parseInt(ss[0]),ss[1],Integer.parseInt(ss[2]));
                          
                          
                      }
        
                      // 3.打印所有学生中姓"zhang"的学生信息
                      for(int i = 0;i<num;i++) {
                          if(st[i].getName().startsWith("zhang")) {
                              System.out.println(st[i]);
                          }
                          
                      }      
    }

}

 

 结果:

 


 

正则表达式

1. 概述

正则表达式本质就是一个 字符串,用于进行数据格式的验证

通常情况下,正则表达式使用  ^ (异或符号)开头,使用$  (美元符号) 结尾。        可以省略,但是推荐写上


 2. 常用的方法

boolean  matches(String  regex)        -用于判断当前字符串是否满足参数指定的正则表达式规则

String     replaceAll(String  regex,  String  replacement   -用于按照正则表达式进行字符串的全部替换

String     replaceFirst(String  regex,  String  replacement) -用于替换满足正则表达式的第一个字符串

String     split(String  regex)             -用于按照指定的正则表达式进行字符串的拆分

 


 

3.常用规则

字符类:

[abc]     -表示可以出现a、b 或c中的任意字符

[^abc]   -表示可以出现任意字符,除了a、b 及c

[a-zA-Z]  -表示可以出现a到z 和 A到Z之间的任意字符。即可以出现所有的字母。

 

预定字:

 \d  -表示可以出现任何数字,相当于[0~9]

\D  -表示可以出现任何非数字,相当于[^0~9]

\s  -表示可以出现任何空白字符,相当于[  \t\n\x0B\f\r]

\S  -表示可以出现任何非空白字符,相当于[^\s]

\w  -表示可以出现任何单词字符,相当于[a-zA-Z_0~9]

\W  - 表示可以出现任何非单词字符,相当于[^\w]

 

数量词:

X?  -表示X可以出现一次或一次也没有,相当于 0-1次;

X*  -表示X可以出现零次或多次,相当于 0-n次;

X+  -表示X可以出现一次或多次,相当于 1-n次;

X{n}  -表示X恰好出现 n次

X{n, }  -表示X至少出现 n次,即 >=n 次

X{n,m}   -表示X至少出现 n次,但是不超过 m 次。即,>=n 且 <=m 次。

 


代码:

public class RegMethodTest {

    public static void main(String[] args) {
        
        String s1 = "1234 abcd 5678 efgh";
        
        // 将字符串中所有的数字替换成字符串"number"
        String s2 = s1.replaceAll("\\d{1,}", "number");
        System.out.println("               "+"s1 =:"+s1);
        System.out.println();
        System.out.println("  将字符串中所有的数字替换成字符串\"number\": "+s2);
        
        System.out.println();
        
        // 字符串中第一个字母组成的子串替换成字符串 "char"
        s2 = s1.replaceFirst("[a-zA-Z]{1,}","char");
        System.out.println();
        System.out.println("  将字符串中第一个字母组成的子串替换成字符串 \"char\" :"+s2);
     
        
    }

}

 

结果:

               s1 =:1234 abcd 5678 efgh

  将字符串中所有的数字替换成字符串"number": number abcd number efgh


  将字符串中第一个字母组成的子串替换成字符串 "char" :1234 char 5678 efgh

 

 


 

测试正则表达式代码:

步骤:

1.定义字符串对象用于描述正则表达式的规则

2.不断提示用户输入字符串内容,并进行正则表达式的验证

3.若格式匹配 则结束输入。否则,继续提示用户输入

 

思路先写 2和3步

import java.util.Scanner;

public class RegTest {

    public static void main(String[] args) {
        //1.定义字符串对象用于描述正则表达式的规则
//2.不断提示用户输入字符串内容,并进行正则表达式的验证 Scanner scanner = new Scanner(System.in); while(true) { System.out.println("请输入一个字符串内容: "); String str = scanner.next(); //3.若格式匹配 则结束输入。否则,继续提示用户输入 if(str.matches(regStr )){ System.out.println("输入格式正确"); break; } System.out.println("输入格式不正确!"); } } }

 

 

第i步: 是为regstr 制定规则

 

         1.描述用户名的规则,要求由6 ~ 8位数字、字母以及下划线组成
              //String regStr = "^\\w{6,8}$";

                   或
             //String regStr = "^[a-zA-Z_0-9]{6,8}$";


        2.描述银行卡密码的规则,要求由6位数字组成
           //String regStr = "^\\d{6}$";


        3.描述身份证号的规则,要求由17位数字组成 加 1位数字或X
           //String regStr = "^\\d{6}\\d{4}\\d{2}\\d{2}\\d{3}[0-9X]{1}$";


       4. 描述座机号码,要求3位国籍号-3到4位区号-7~8位座机号码
          //String regStr = "^\\d{3}-\\d{3,4}-\\d{7,8}$";


        5.描述手机号码,要求1开头,总共11位数字组成
          //String regStr = "^1\\d{10}$";
          //xiaomg_123@163.com


        6.描述邮箱规则,要求字母数字下划线组成,至少1位,@,字母数字组成,至少2位,
           //常见的域名 .com  .cn  .tedu .org .net .com.cn
          String regStr = "^\\w{1,}@[a-zA-Z0-9]{2,}(.com|.cn|.tedu|.org|.net|.com.cn)$";

 


 

posted @ 2019-10-27 09:03  小茅棚  阅读(344)  评论(0编辑  收藏  举报