正则在java的开发中有着很重要的地位,包括javaScript也都是支持正则的,正则实际上最早是PHP上的一种发展产物,在JDK1.4之前如果想要使用正则,则需要独立进行开发包的配置,在JDK1.4之后,程序中增加了对正则的支持。
1、为什么要有正则?
例如:现在有如下的一种程序要求:要求判断一个字符串是否由数字组成?
按照之前的做法,程序的基本思路:将字符串拆分成字符数组,之后依次判断,是否是数字。
package org.lxh.regextdeno;
public class RegexDemo01
{
public static void main(String[] args)
{
String str ="12134123414123";
char c [] = str.toCharArray(); //将字符串变为字符数组
boolean flag = true;
for (int i = 0; i<c.length; i++)
{
//不是数字
if (!(c[i]>='0' && c[i]<='9'))
{
flag = false;
break;
}
}
if (flag)
{
System.out.println("字符串是由数字组成!");
}
else
{
System.out.println("字符串不是由数字组成!");
}
}
}
那么,如果此时使用了正则完成功能,则代码变得非常简单;
package org.lxh.regextdeno;
public class RegexDemo02
{
public static void main(String[] args)
{
String str ="12134123414123";
if (str.natches("\\d+))
{
//使用正则
System.out.println("字符串是由数字组成!");
}
else
{
System.out.println("字符串不是由数字组成!");
}
}
}
很明显,使用后者更加简单,因为代码较少,那么在程序中的\\d就是正则表达式。
2、正则表达式
如果要想了解全部的正则,则应该查询java.util.regex.Pattern类。
字符取值范围
No 表达式 描述
1、 [abc] 表达内容可能是a,可能是b,也可能是c
2、 [^abc] 表示内容不是a、b、c中的任意一个
3、 [a-zA-Z] 表示全部的英文字符,包括大小写,[a-z]:表示全部小写字符;[A-Z]:表示全部大写字母
简洁的字符表示
No 表达式 描述
1、 . 匹配任意的字符
2、 \d 表示由数字组成
3、 \D 表示由非数字组成
4、 \s 表示全部的空格:[\t\n\x0B\f\r]
5、 \S 表示不是空格
6、 \w 表示由字母、数字、_组成
7、 \W 表示由非字母、数字、_组成
数量表达式
No 表达式 描述1、 ? 表示出现0次或1次
2、 * 表示出现0次、1次或多次
3、 + 表示出现1次或多次
4、 {n} 表示正好出现n次
5、 {n,} 表示出现n次以上
6、 {n,m} 表示出现n-m次
3、pattern类
pattern类,表示匹配的正则表达式
pattern类中并不存在构造方法,因为构造方法被私有化了,如果要想进行实例化操作,则需要使用以下的方法:
public static Pattern compile(Sting regex):指定要使用的正则表达式3
在Pattern类中提供了拆分字符串的操作:
public String[] split(Char Sequence input)
package org.lxh.regextdemo;
import java.util.regex.Pattern;
public class PatternDemo
{
public static void main(String [] args)
{
String str = "TOM:30|JERRY:31|PAPA:32";
String regex = "\\|";
Pattern pat = Pattern.cospile(regex); //执行拆分操作
String sl[] = pat.split(str); //拆分
for (int i = 0; i< sl.length; i++)
{
Systrm.out.println(sl[i]); //输出
}
}
}
4、Matcher类
Matcher类的主要功能是进行验证及替换操作。但是,此类的实例化需要依靠Pattern类的以下方法:
public Matcher matcher(Char Sequence input)
Matcher类的以下两个方法最为常用:
1)验证字符串是否合法:public boolean matches()
2)字符串替换:public String replaceAll(String replacement)
5、String类对正则的支持(重点)
在实际的操作中,为了方便用户使用正则往往很少去直接使用Matcher或Pattern类,而使用String类,在String类中提供了以下的方法用于正则的支持:
1)验证:public boolean matches(String regex)
2)替换:public String replaceAll(String regex,String replaxement)
3)拆分:public String[] split(String regex)
范例:验证用户名长度是否是6~15位
package org.lxh.regextdemo;
public class StringRegexDemo01
{
public static void main(String[] args)
{
String str = "aaaaaaaaaaaa";
Systrm.out.println(str.matches("\\w{6,15}"));
}
}
范例:验证一个email之地是否合法
package org.lxh.regextdemo;
public class StringRegexDemo02
{
public static void main(String[] args)
{
String str =" [email protected]";
String regex = "\\w+@\\w+.(com|net.cn)";
Systrm.out.println(str.matches(regex));
}
}
6、总结
1)整个java的类库在复习的时候一定要结合doc文档去看。
2)大数操作的两个类:BigInteger、BigDecimal两个类很重要。
3)了解对戏那个克隆的基本原理。
4)SimpleDateFormat类的使用。
5)正则表达式。