Java正则表达式
1、正则表达式(特点)
正则表达式,顾名思义,就是符合一定规则的表达式。作用是专门用于操作字符串,虽说String类中已经有了很多操作字符串的方法,但是它们的功能单一,操作起来还麻烦,正则弥补了它们的补足。
下面我们通过一个小例子来感受一下区别:
需求:对QQ号码进行校验,要求:5~15位,0不能开头,只能是数字。
(1)常规的做法:
class CheckQQ
{
public static void main(String[] args)
{
String qq="3891289y49";
checkQQ(qq);
}
//常规的做法:
public static void checkQQ(String str)
{
String qq=str;
if(str.length()>=5&&str.length()<=15)
{
if(!str.startsWith("0"))
{
char[] chs=str.toCharArray();
boolean flag=true;
for(int x=0;x<chs.length;x++)
{
if(!(chs[x]>='0'&&chs[x]<='9'))
{
flag=false;
break;
}
}
if(flag==true)
System.out.println("qq:"+qq);
else
System.out.println("出现非法字符!");
}
else
{
System.out.println("不可以0开头!");
}
}
else
{
System.out.println("长度错误!");
}
}
}
我们可以优化一下:
/*
char[] chs=str.toCharArray();
boolean flag=true;
for(int x=0;x<chs.length;x++)
{
if(!(chs[x]>='0'&&chs[x]<='9'))
{
flag=false;
break;
}
}
if(flag==true)
System.out.println("qq:"+qq);
else
System.out.println("出现非法字符!");
*/
回忆之前我们学过的Integer.parseInt(String str);
如果str=“12a”,那么Integer.parseInt(String str)就会抛出异常:NumberFormatException·。
因此我们可以将这个方法用在此处。
将上面一大片代码改成:
try
{
long l=Long.parseLong(qq);
System.out.println("qq:"+qq);
}
catch(Exception e)
{
System.out.println("出现非法字符!");
}
但是,尽管我们这么优化,代码还是很复杂。因此我们只得另辟蹊径。
(2)用正则表达式来做:
通过查找API文档,我们发现String类中一个方法,之前我们没讲的:
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。用规则匹配整个字符串,只要有一处不符合规则,匹配结果就返回-1。
什么意思呢,就是说字符串是否符合给定的规则。这个规则通过一个字符串来定义,因此称之为正则表达式。正则表达式通常用regex来表示,它也是一个字符串。
import java.util.regex.*;
class CheckQQ
{
public static void main(String[] args)
{
String qq="3891289y49";
checkQQ(qq);
}
//用正则表达式:
public static void checkQQ(String str)
{
String qq=str;
String regex="[1-9][0-9]{4,14}";
boolean flag=qq.matches(regex);
if(flag)
System.out.println("qq:"+qq);
System.out.println("出现非法字符");
}
}
解释:
"[1-9][0-9]{4,14}"
[1-9]:表示字符串的第一位必须是1到9范围内的一个数字。
[0-9]:表示字符串的第二位必须是0到9范围内的一个数字。
{4,14}:表示想第二位这样的数据可以出现4,5,6,7,8,9,10,11,12,13,14次,包括第二位这一次出现在内。
"[1-9][0-9]{4,14}"从左往右看,还是从右往左看都可以。
这些符号都封装在java.util.regex包中的Pattern类中,因此要导包。
可以明显的看到,代码少了很多,这就是正则表达式的威力之处。可以看出,正则表达式就是用一些特定的符号来表示一些代码操作,这样就简化了书写。所以学习正则表达式就是在学习一些特殊符号的使用。