正则表达式可以很方便地处理字符串。下面做了一个小小的总结,用几个例子说明。虽然不是很全面,但应该可以应对大部分的情况吧。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
/*
* Pattern类常用的方法有三个:
* Pattern pattern()
* Matcher matcher(CharSequence),可以传入一个String字符串
* String[] split(CharSequence)
* */
Pattern p;
Matcher m;
//文字替换
public void replaceTest(){
p = Pattern.compile("java");
m = p.matcher("java i love you.oh,my java!");
System.out.println(m.replaceFirst("c++"));
m = p.matcher("java i love you.oh,my java!");
System.out.println(m.replaceAll("c++"));
}
/*
* ^为限制开头,如果在[]里面的话表示取反,如:[^abc],除abc之外的字符
* .代表除\n之外的字符
* *代表任意多的前一个字符
*/
public void checkStart(){
p = Pattern.compile("^java.*");
m = p.matcher("java开头的哦");
System.out.println("开头测试:"+m.matches());
}
/*
* $为限制结尾
* */
public void checkEnd(){
p = Pattern.compile(".*java$");
m = p.matcher("结尾是java");
System.out.println("结尾测试:"+m.matches());
}
/*
* []表示特定条件, 如:[abcd]表示a或b或c或d
* +表示至少一次
* */
public void splitWith(){
p = Pattern.compile("[, ]+");
String[] ss = p.split("hello every one,,,,i love you");//以逗号空格分割字符串
for(String s:ss){
System.out.println(s);
}
}
public void search(){
p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);//忽略大小写
m = p.matcher("java JAva");
while(m.find()){
System.out.println(m.group());//将匹配到的字符串抓出来
}
}
/*
* j{2}表示两个j,j{2,5}表示2到5个j,j{2,}表示2个以上j
* ?表示任意多个特定字符
* [0-9]表示0到9任意一个数字
* */
public void f(){
p = Pattern.compile(".{2,5}[0-9]");//匹配二到五个字符加一个数字,其中二到五尽可能往大了匹配
m = p.matcher("ab3c3abc2d3");
while(m.find()){
System.out.println(m.group());//将匹配到的字符串抓出来
}
p = Pattern.compile(".{2,5}?[0-9]");//与上面的相反,尽可能往小了匹配
m = p.matcher("ab3c3abc2d3");
while(m.find()){
System.out.println(m.group());//将匹配到的字符串抓出来
}
p = Pattern.compile(".{2,5}+[0-9]");
m = p.matcher("ab3c3abc2d3");
while(m.find()){
System.out.println(m.group());//将匹配到的字符串抓出来
}
p = Pattern.compile(".{3}");
m = p.matcher("ab3c3abc2d3");
System.out.println("---");
while(m.find()){
System.out.println(m.group());//将匹配到的字符串抓出来
}
}
/*
* \\d表示数字,\\D非数字
* \\w表示字符,包括大小写,数字,\\W非字符
* \\s空白符,制表回车换行空格,\\S非空白符
* \t制表
* \n换行
* \r回车
* \\\\匹配一个\,在java中\\表示一个\
* */
public void f2(){
p = Pattern.compile("\\d{3}[a-z]{2}");
m = p.matcher("231cd332de");
System.out.println("---");
while(m.find()){
System.out.println(m.start()+"-"+m.end()+":"+m.group());//将匹配到的字符串抓出来
}
p = Pattern.compile("[\\\\]\\S{2,}");
m = p.matcher("\\+-8");
System.out.println("---");
while(m.find()){
System.out.println(m.start()+"-"+m.end()+":"+m.group());//将匹配到的字符串抓出来
}
p = Pattern.compile("(\\d{2,5})([a-z]{2})");
m = p.matcher("23456789aa");
System.out.println("---");
while(m.find()){
System.out.println(m.start()+"-"+m.end()+":"+m.group());//将匹配到的字符串抓出来
}
}
/*
* |表示或的关系
* */
public void f3(){
p = Pattern.compile("[abc]|d{3}");
m = p.matcher("addd");
System.out.println("---");
while(m.find()){
System.out.println(m.start()+"-"+m.end()+":"+m.group());//将匹配到的字符串抓出来
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t = new Test();
t.replaceTest();
t.checkStart();
t.checkEnd();
t.splitWith();
t.search();
t.f();
t.f2();
t.f3();
}
}
注释已经说得很详细了,不在赘言。