最近做一项目 要求特定字符串的替换,以前做时用的是 split() 分割,然后循环 加上的,但是后来发现这样对数据的要求度比较高,不能存在 分割字符,所以才用了正则,案例如下:
String str1="1973.07--1977.09 某@某省某$某县某某镇%小学#教师。1977.09--1979.09 某某省&某某县某某&镇初中教师。1988.11--1993 某某省某某市委宣传部干事、副科级、科长(1987.09--今 在某某大学某某系某某专业学习)。";要替换此字符串中的 日期格式i 为1973年07月
Matcher matcher = Pattern.compile("\\d{4}.\\d{1,2}").matcher(str1); //用正则匹配日期格式 1973.08 或1973.8
StringBuffer sbr = new StringBuffer();
while(matcher.find()){ //循环查找匹配值
String dateTime=matcher.group(0); //用matcher.group(0) 取到匹配值 然后做处理
if(dateTime!=null&&!dateTime.equals("")){
dateTime=dateTime.substring(0,4)+"年";
}
matcher.appendReplacement(sbr, dateTime); //将处理完成后的匹配值用appendReplacement(sbr, dateTime); 方法替换原有的
}
matcher.appendTail(sbr); //添加最后一次匹配值
str1=sbr.toString().replaceAll("--","至").replaceAll("<", "(").replaceAll(">",")").replaceAll(" ", "").replaceAll(" ","").replaceAll("[&$#@%]", "");
System.out.println(str1);
行了 大功告成!!! 至于正则表达式的一些规则如下:
1.匹配字符串用 (str)
2.匹配次数 {m,n}
3.匹配范围 [a-z]
4.匹配情况 x|y
需要记匹配项
\b 空字符边界
\B 非空的字符边界
\d 数字
\D 非数字
\s 空字符串
\S 非空字符串
具体参考:http://baike.baidu.com/view/94238.htm