正则表达式
一个作业:
首先输入学生人数,循环输入班级的学生信息,然后放入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)$";