基础系列【十五】--Pattern
Pattern
java.lang.Object java.util.regex.Pattern (public final class Pattern)
最终类,用来匹配或者验证默写规则
//匹配 abc/def/lmn 组成的字符串:[]--表示其中的一个
String str = "afm";
System.out.println(str.matches("[abc][def][lmn]"));//true
//匹配一字母的组成
//匹配起始字符-结束字符:表示连续范围
System.out.println(str.matches("[a-zA-Z]"));
//匹配任意一个数字
System.out.println(str.matches("[0-9]"));
//匹配除了a/g/m/x以外的任何一个字符
System.out.println(str.matches("[^agmx]"));
String str = "abb";
//a.b的字符串,.表示任意字符
System.out.println(str.matches("a.b"));
// 在正则中如何匹配. ?
// java中的转义的字符转义字符 \t \r \n \\ \' \" \b \f
//\\.--java先转义--\.--正则在转义--.
// 文件名后缀,小数
System.out.println("\\.");
// 如何匹配\ ?
//路径--E:\\a.txt
str = "\\";
//\\\\--java先转义--\\pattern在转义 --\
System.out.println(str.matches("\\\\"));
//数量词--一个字符只能跟一个数量词
String str = "";
//匹配以a开始以b结尾的字符串
//*表示之前的字符出现0次或者多次>=0
System.out.println(str.matches("a.*b"));
str = "3m";
//+表示之前的字符至少出现一次>=1即可
//匹配以数字开头小写字母为结尾的至少有3个字符组成的字符串
System.out.println(str.matches("\\d.+[a-z]"));
//匹配以数字开头的至多有两个字符组成的字符串
//? 表示小于等于1次
System.out.println(str.matches("\\d.?"));
//{n}:表示字符恰好出现几次
//匹配由5个a组成的字符串
System.out.println(str.matches("a{5}"));
//至少有3个数字组成的字符串
//{3,}
System.out.println(str.matches(".{3,}"));
//匹配长度在6-12之间的字符串
//{m,n}
System.out.println(str.matches(".{6,12}"));
//匹配含有两个ab的字符串:contains:只能判断包含不能判断出现的次数
//()--捕获组
// \\n--引用前面对应编号的捕获组
System.out.println("".matches(".*(ab).*\\1.*"));
// 叠词
System.out.println("".matches("(.)\\1+"));
// aabb
System.out.println("".matches("(.)\\1(.)\\2"));
// (.)\\1--表示捕获一个字符,并且该字符至少出现两个
// (.){2,}--表示至少两个字符
// 捕获组的编号--从(出现的位置开始计算
//(a(b(cd)e)f)(g)
//1.(a(b(cd)e)f) 2.(b(cd)e) 3.(cd) 4.(g)
// replaceAll()
String str = "6adsfasdf23156asdfsadf56asdf777";
//对字符串中的数字排序
char[] cs = str.replaceAll("\\D", "").toCharArray();
Arrays.sort(cs);
System.out.println(Arrays.toString(cs));
// public String[] split(String regex):作为切割符的字符会被切掉
// 注意:如果切割符在字符串的尾段,会直接切掉。
String[] strs = str.split("\\d");
System.out.println(Arrays.toString(strs));//[, adsfasdf, , , , , asdfsadf, , asdf]
//转义字符;有特殊含义的需要转义? * + {} () [] .,在[]中转义字符,只代表符号本身
练习:
// 1.匹配小数:00.21--不是小数
String str = "";
// |--前后两个表达没有关系
String regex = "0\\.\\d*|[1-9]\\d*\\.\\d*";
System.out.println("0.80".matches(regex));
// 2.匹配密码{6,12},至少出现有数字/字母/_中的两个
System.out.println(checkPassword("12345678910w"));
// 3.匹配邮箱 --字母/数字/_@数字/字母/.com /.cn qq.com 163.com 126.com
String reg = "\\w{6,20}@[a-zA-Z0-9]{1,10}(\\.com)(\\.cn)?|\\w{6,20}@[a-zA-Z0-9]{1,10}(\\.cn)";
System.out.println("123@qq.com.cn".matches(reg));
// 4.统计每种字符出现的个数
// 5.交换Amy和Tom的位置
str = "Amy sj Tom";
System.out.println(str.replaceAll("(Amy)(.*)(Tom)", "$3$2$1"));//Tom sj Amy
// 6.把叠字替换为单字
str = "aaabbddefff";
System.out.println(str.replaceAll("(.)\\1+", "$1"));
// 7.输入一个字符串来求这个字符串的平均碎片长度--aabbbccdee--aa bbb cc d ee
//有多少个片段
int len = str.length();
System.out.println(len);
str = str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
System.out.println(len*1.0/str.length());
}
static boolean checkPassword(String password) {
if (password == null) {
return false;
}
// [a-zA-Z0-9_]
if (!password.matches("\\w{6,13}")) {
return false;
}
// 定义一个变量记录出现符号的个数
int count = 0;
// 判断密码是否包含数字
if (password.matches(".*\\d.*")) {
count++;
}
// 判断密码是否包含字符
if (password.matches(".*[a-zA-Z].*")) {
count++;
}
// 判断密码是否包含_
if (password.matches(".*_.*")) {
count++;
}
if(count>=2){
return true;
}
return false;
}
下一篇:
基础系列【十六】–异常