考虑到此时读者不知道何为正则表达式:
我需要验证一个字符串是否符合qq号码的规则,我们采取已有知识进行验证
java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//正则表达式理解为一种规则
//这种规则就是用来校验字符串的,校验数据格式的合法性
//核心思想:先把异常数据进行过滤,然后再考虑正常数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个qq号码");
String number = sc.next();
Boolean flag = checkQQ(number);
System.out.println("qq号码"+flag);
}
public static boolean checkQQ(String qq) {
//6-20位,0不能在开头,必须全部是数字
int len = qq.length();
if (len < 6 || len > 20) {
return false;
}
char c = qq.charAt(0);
if (c == 0) {
return false;
}
for (int i = 0; i < len; i++) {
char d = qq.charAt(i);
if (d < '0' || d > '9') {
return false;
}
}
return true;
}
}
这样写的逻辑是复杂的,较为浪费时间,因此我们选择采用API正则表达式来完成工作
java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//正则表达式理解为一种规则
//这种规则就是用来校验字符串的,校验数据格式的合法性
//核心思想:先把异常数据进行过滤,然后再考虑正常数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个qq号码");
String number = sc.next();;
boolean match = number.matches("[1-9]\\d{5,19}");
System.out.println("qq号码"+match);
}
接下来我们补充一些正则表达式的判断条件
java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//正则表达式理解为一种规则
//这种规则就是用来校验字符串的,校验数据格式的合法性
//核心思想:先把异常数据进行过滤,然后再考虑正常数据
//我们可以粗略的将正则表达式的作用分成两个方向:
//a:校验字符串是否满足规则
//b:在一段文本中查找满足要求的内容
//正则表达式规则:
//在正则表达式中[]代表一种范围
// [abc] 意味着字符串只能出现abc
// [^abc] 意味着除了abc以外的所有字符
// [a-zA-Z]a到z A到Z包括范围
// [a-d[m-p]]a到d或者m到p
// [a-z&&[def]] a-z和def的交集为 def
// [a-z&&[^bc]] a-z与非bc的集合
System.out.println("------------------1----------------");
System.out.println("a".matches("[abc]"));//true
System.out.println("z".matches("[abc]"));//false
System.out.println("------------------2----------------");
System.out.println("a".matches("[^abc]"));//false
System.out.println("z".matches("[^abc]"));//true
System.out.println("zz".matches("[^abc]"));//false
System.out.println("zz".matches("[^abc][^abc]"));//true
//预定义的字符
// . 匹配任何字符
// \d 一个数字[0-9]
// \D 非数字:[^0-9]
// \s 一个空白字符
// \转义字符 改变后面后面字符原本的含义
System.out.println("\"\"");//这里在""后面加一个\的时候 ""的特殊含义就被去掉了
//表示任何一个字符 .
System.out.println("你".matches(".."));//false
System.out.println("你".matches("."));//true
System.out.println("你a".matches(".."));//true
// \\d是任意一位数字
System.out.println("a".matches("\\d"));//不行 是一位非数字
System.out.println("3".matches("\\d"));//可以 是一位且数字
System.out.println("333".matches("\\d"));//不行 不是一位数字
// \\w是一位单词字符
System.out.println("z".matches("\\w"));//true
System.out.println("2".matches("\\w"));//true
System.out.println("21".matches("\\w"));//false
System.out.println("你".matches("\\w"));//false
// 非单词字符 \\W
System.out.println("你".matches("\\W"));//true
System.out.println("------------------------------------------------------------------------------");
//必须是数字 字母 下划线 六位
System.out.println("2442fsfsf".matches("\\w{6,}"));
}
}