正则表达式:
用于操作字符串的一些规则表达式。规则也就是一些符号,被赋予了特定的含义,其实这些符号低层都对应 着一段代码,java将这些符号进行了封装而已,这样做无非就是为了便于操作方便书写。
正则表达式对字符串的常见操作,一共分四种。
1.匹配。
使用的是String类中的matches()。
<span style="font-size:18px;">//匹配演示。
String str="aooz";
/*
*Greedy 数量词
*o?:一个或没有 .
*o+:一个或多个。
*o*:一个没有或多个。
*/
String regex="ao*z";
boolean b= str.matches(regex);
//校验QQ号
//5-15位
//不能以开头
//必须全是数字
String qq="123456789";
String regex2="[1-9][\\d]{4,14}";
boolean b2 =qq.matches(regex2);
System.out.println(qq+"::"+b2);</span>
2.切割。
使用的是String类中的split()。
<span style="font-size:18px;"> //切割演示
private static void splitDemo() {
//把数字切出来
// String str="23 34 56 11 22 33";
// String[] arr=str.split(" +");//+,一个或多个
//\\. -->\\是转义-->\也是转义-->.
//在正则中.有特定含义,代表的是任意字符。
// String str="hbb.hy.college";
// String[] arr=str.split("\\.");
//使用叠词来切,叠词:qq zzz vvvv
String str="dfsflkdsfqqdfsafkiozzzkdfasfasvvvvkdfl";
//.是代表任意字符,()是封装成一组的意思。捕获组。
//\\1-->转义成1.意欲为引用前面哪一组。
//+:一个或多个。详情查阅API.
String[] arr=str.split("(.)\\1+");
for(String s :arr)
System.out.println(s);
}</span>
3.替换。
使用的是String类中的replaceAll()。
<span style="font-size:18px;">// 替换演示
private static void replaceAllDemo() {
//将叠词替代成一个,qq-->q zzz-->z vvvv-->v
// String str="dfsflkdsfqqdfsafkiozzzkdfasfasvvvvkdfl";
// String newStr=str.replaceAll("(.)\\1+", "$1");//后一个参数可以通过$数字来引用前一个参数的组。
//加密手机号码:如 18316699418 -->183****9418
String str="18316699418";
String newStr=str.replaceAll("(\\d{3})(\\d{4})(\\d{4})", "$1****$3");//封装成3个组。
System.out.println(newStr);
}</span>
4.获取
<span style="font-size:18px;">// 获取演示。
private static void getDemo() {
/*
* 很遗憾String类中没有提供相对应的方法,所以必须使用到一个Pattern类,Pattern是一个正则对象。
* 其实String类中那些用到正则的方法,也是间接调用这个Pattern类的方法。
*/
String str="i believe i can fly,this is regex demo ";
String regex="\\b[a-z]{3}\\b";
//1.将正则表达式编译成Pattern对象
Pattern p =Pattern.compile(regex);
//2.通过p的matcher方法获取相对应的Matcher匹配器对象。得到Matcher匹配器是为了得到更广泛的应用。
Matcher m=p.matcher(str);
//3.通过匹配器对象的方法将正规则表达式作用于字符串。
while(m.find()){//匹配到规则的内容 返回true
//m.group(),得到内容
//m.start(),开始位置
//m.end(),结束位置,
//注意:包含头不包含尾。
System.out.println(m.start()+":::"+m.group()+":::"+m.end());
}
}
// 替换演示
private static void replaceAllDemo() {
//将叠词替代成一个,qq-->q zzz-->z vvvv-->v
// String str="dfsflkdsfqqdfsafkiozzzkdfasfasvvvvkdfl";
// String newStr=str.replaceAll("(.)\\1+", "$1");//后一个参数可以通过$数字来引用前一个参数的组。
//加密手机号码:如 18316699418 -->183****9418
String str="18316699418";
String newStr=str.replaceAll("(\\d{3})(\\d{4})(\\d{4})", "$1****$3");//封装成3个组。
System.out.println(newStr);</span>