正则表达式:表示字符串的判断条件
phone:1[356789][0-9]{9}
// 判断字符串:
// 由3个字母组成
// 第一个字母是a/b/c
// 第二个字母是d/e/f/g
// 第三个字母是x/y/z
// System.out.println(str.matches("[abc][defg][xyz]"));
// 匹配由一个字母组成的字符串
// System.out.println(str.matches("[a-zA-Z]"));
// 匹配由一个数字组成的字符串
// System.out.println(str.matches("[0-9]"));
// System.out.println(str.matches("\d"));
// 匹配由一个字符组成的字符串,但不是a/b/c
// [^…] 表示除了这些字符
System.out.println(str.matches("[^abc]"));
// 匹配由a开头的由2个字符组成的字符串
// . 表示通配符,可以匹配任意一个类型的字符
// System.out.println(str.matches(“a.”));
// 判断是否是一个 .
// \\. Java先转义为\. ,正则再转义为.
// System.out.println(str.matches("\\."));
// 怎么匹配 \ “c:\\java”
// \\\\ Java先转义为\\ ,正则再转义为\
System.out.println(str.matches("\\\\"));
// 数量词
// + 表示之前的字符至少出现1次 >= 1
// System.out.println(str.matches(“a.+”));
// 匹配由小写字母开头由数字结尾的字符串
// * 表示之前的字符可有可无 >= 0
// System.out.println(str.matches("[a-z].*\d"));
// 匹配由a开头至多2个字符组成的字符串
// ? 表示之前的字符至多出现1次 <= 1
System.out.println(str.matches(“a.?”)); a ab
// 匹配由5个小写字母组成的字符串
// {n} 表示之前的字符恰好出现n次 == n
// System.out.println(str.matches("[a-z]{5}"));acccc
// 匹配至少由5个小写字母组成的字符串
// System.out.println(str.matches("[a-z]{5,}"));
// 匹配由8-12个小写字母组成的字符串
System.out.println(str.matches("[a-z]{8,12}"));
正则练习:
- 验证电话号码
//正则表达式,验证电话号码
public static void test1(){
Scanner sc = new Scanner(System.in);
System.out.println("input phone:");
String phone = sc.next();
if(phone.matches("1[3456789][0-9]{9}")){
System.out.println("正确:"+phone);
}else{
System.out.println("错误");
}
}
- 邮箱的验证
//练习:邮箱的验证
//wangying@tedu.cn
//1234567@qq.com
//abc123@163.com
//aa222@123.com.cn
//[a-zA-Z0-9_]+@[a-z0-9]{2,}(\\.[a-z]{2,3}){1,2}
public static void test2(){
Scanner sc = new Scanner(System.in);
System.out.println("input email:");
String email = sc.next();
String regex = "[a-zA-Z0-9_]+@[a-z0-9]{2,}(\\.[a-z]{2,3}){1,2}";
if(email.matches(regex)){
System.out.println("email:"+email);
}else{
System.out.println("邮箱格式错误!");
}
}
- 输入一个字符串,然后判断字符串是否是一个小数字符串
10.28 0.56 3.00 13.85 15. 00.65
Scanner sc=new Scanner(System.in);
System.out.println("输入数据");
String str=sc.next();
String regex1="0\\.[0-9]+";
String regex2="[1-9][0-9]*\\.[0-9]+";
if(str.matches(regex1)||str.matches(regex2)) {
System.out.println("是小数");
}else {
System.out.println("不是小数");
}
验证的特例:100.2, 00.1 , 12.
- 校验密码:8-20位,小写字母/大写字母/数字中的至少两种
if(str.matches("[A-Za-z0-9]{8,20}")) {
if(!str.matches("[A-Z]{8,20}")&&!str.matches("[a-z]{8,20}")&&!str.matches("[0-9]{8,20}")) {
System.out.println("是");
}else {
System.out.println("不是");
}
}else {
System.out.println("不是");
}
正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作。String类里也提供了如下几个特殊的方法。
➢boolean matches(String regex):判断该字符串是否匹配指定的正则表达式。
➢String replaceAl(String regex, String replacement);将该字符串中所有匹配regex的子串替换成replacement。
➢String[] split(String regex):以regex作为分隔符,把该字符串分割成多个子串。
上面这些特殊的方法都依赖于Java提供的正则表达式支持。
replaceAll()替换例子:
//replaceAll()替换
//"a b c" \\s ""
public static void test5(){
String str = "a b c";
String str2 = "abcqsbabc";
System.out.println(str.replaceAll("\\s", "")); //abc
System.out.println(str2.replaceAll("qsb", "*")); //abc*abc
}
split()解析字符串例子:
//split()解析字符串
//"0001 张三 18 100 99 100"
public static void test6(){
String stu = "0001 张三 18";
String[] values = stu.split("\\s");
String name = values[1];
int age = Integer.parseInt(values[2]);
System.out.println(name+","+age); //张三,18
/*for(String str :values){
System.out.println(str);
}*/
}
练习:url地址解析出key-value
String url="//http://127.0.0.1:8080/myweb/index.html?name=admin&pw=123456";
if(url.contains("?")) {
//String substring(int beginlndex): 获取从 beginlndex 位置开始到结束的子字符串。
// int indexOf(int ch): 找出 ch 字符在该字符串中第一次出现的位置
String s=url.substring(url.indexOf("?")+1);
//System.out.println(s);
String[] values=s.split("&");
for(String v:values) {
String[] mapArray=v.split("=");
System.out.println(mapArray[0]+":"+mapArray[1]);
}
}else {
System.out.println("没有要解析的数据");
}
结果为:
name:admin
pw:123456