------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
七、正则表达式
/*
正则表达式:符合一定规则的表达式
作用:用于专门操作字符串。
特点:用一些特定的符号来表示一些代码操作,这样就简化书写。
所以学习正则表达式就是在学习一些特殊符号的使用
好处:简化对字符串的复杂操作
弊端:符号定义越多,阅读性差
具体操作功能
1,匹配:matches方法,用规则匹配整个字符串,只要一出不符合,返回false
2,切割:spli
3,替换:replaceAll
4,获取:
*/
class RegexDemo
{
public static void main(String[] args)
{
/*
String str = "erkktykkkkuiqqqo";
String reg = "(.)\\1+";//按照叠词完成切割//可以将规则封装成一个组用()
//从1开始,想要使用已有的组可用\n表示,字符串中要再加\为\\n
zhengZeSplit(str,reg);
*/
/*String reg = "\\d{5,}";
String str = "wer13832155648ty1234564uiod2345654654f";
String newStr = "#";
replaceAllDemo(str,reg,newStr);
*/
String str1 = "erkktyqquizzzoppt";
String reg1= "(.)\\1+";
String newStr1 = "$1";
replaceAllDemo(str1,reg1,newStr1);
}
//获取:想按照规则去指定的子串
//操作步骤:
//1,将正则封装成对象,
//2,让正则对象和要操作的字符串关联
//3,关联后,获取正则匹配引擎
//4,通过引擎对符合规则的子串进行操作
public static void replaceAllDemo(String str,String reg,String newStr)
{
str = str.replaceAll(reg,newStr);
sop(str);
}
/*
对qq号码进行校验
要求:5-15 0不能开头,只能是数字
checkQQ()方法复杂,不建议使用
*/
/*
匹配
手机号段只有13xxx 15xxx 18xxx
*/
public static void zhengZeSplit(String str,String reg)
{
String[] arr = str.split(reg);
for(String s:arr)
{
sop(s);
}
}
public static void splitDemo()
{
String str = "zhangsan.lisi.wangwu";
String regex = "\\.";
String[] arr = str.split(regex);
for(String s:arr)
{
sop(s);
}
}
public static void checkTel()
{
String str = "18742104265";
String regex = "1[358]\\d{9}";
boolean b = str.matches(regex);
sop(b);
}
public static void demo()
{
String str = "b9563";
String regex = "\\w\\d*";
boolean b = str.matches(regex);
sop(b);
}
public static void checkQQ_1()
{
String qq = "";
String regex = "[1-9][0-9](4,14)";
boolean flag = qq.matches(regex);
if (flag)
sop("输入正确");
else
sop("不合法");
}
public static void checkQQ()
{
String qq = "";
int len = qq.length();
if (len>=5&&len<=15)
{
if (!qq.startsWith("0"))
{
try
{
long l = Long.parseLong(qq);
sop("qq:"+l);
}
catch (Exception e)
{
sop("出现非法字符");
}
/*char[] arr = qq.toCharArray();
boolean flag = true;
for (int x=0;x<arr.length ;x++ )
{
if (!(arr[x]>='0'&&arr[x]<='9'))
{
flag = false;
}
}
if (flag)
{
sop("qq:"+qq);
}
else
sop("出现非法字符");
*/
}
else
sop("不能0开头");
}
else
sop("长度错误");
}
public static void sop(Object o)
{
System.out.println(o);
}
}
Pattern和matcher对象
//获取:想按照规则去指定的子串
//操作步骤:
//1,将正则封装成对象,
//2,让正则对象和要操作的字符串关联
//3,关联后,获取正则匹配引擎
//4,通过引擎对符合规则的子串进行操作
import java.util.regex.*;
class RegexDemo2
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
public static void getDemo()
{
String str = "ming tian jiu yao fang jia le,da jia。"
String reg = "\\b[a-z]{3}\\b";
//将规则封装对象
Pattern p = Pattern.compile(reg);
//让正则对象和要作用的字符串相关联,获取匹配对象
Matcher m = p.matcher(str);
//其实String类中的matches方法用的就是pattern和matcher对象完成的
//boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找
//sop(b);
//sop(m.group());
while (m.find())
{
sop(m.group());
}
}
public static void sop(Object o)
{
System.out.println(o);
}
}
/*
* 1、 编写一个可以获取文件扩展名的函数,
* 形参接收一个文件名字符串,
* 返回一个扩展名字符串。
* 思路:文件名字符串的最后一“.”之后为文件的扩展名,所以需要用正则表达式将字符串拆分,去最后一个“.”之后的内容
* 步骤:
* 1,定义正则表达式“.”
* 2,拆分存入String数组
* 3,返回String数组最后一个元素
*
*/
public class Test5 {
public static void main(String[] args) {
//调用getExtraName()方法并传递文件名
String extraname = getExtraName("demo.txt.java.mp4");
System.out.println(extraname);
}
public static String getExtraName(String filename){
//定义正则表达式
String reg = "\\.";
//按照给定的正则表达式切割主函数传递过来的String字符串并存进数组
String[] arr = filename.split(reg);
//返回数组最后一个元素,为文件的扩展名
return arr[arr.length-1];
}
}
/*
* 9、 写一个正则表达式,可以匹配尾号5连的手机号。
* 规则: 第1位是1,第二位可以是数字3458其中之一,
* 后面4位任意数字,最后5位为任意相同的数字。
* 例如:18601088888、13912366666
*/
public class Test9 {
public static void main(String[] args)
{
String str = "13912366666";
String reg = "1[3458]\\d{4}(\\d)\\1{4}";
System.out.println(str.matches(reg));
}
}