在Java中,我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串、或者对字符串进行分割、或者对字符串一些字符进行替换/删除,一般会通过if-else、for 的配合使用来实现这些功能 。如下所示:
- public class Test{
- public static void main(String args[]) {
- String str= "@Shang Hai Hong Qiao Fei Ji Chang" ;
- boolean rs = false ;
- for ( int i= 0 ;i<str.length();i++){
- char z=str.charAt(i);
- if ( 'a' == z || 'F' == z) {
- rs = true ;
- break ;
- } else {
- rs= false ;
- }
- }
- System.out.println(rs);
- }
- }
public class Test{
public static void main(String args[]) {
String str="@Shang Hai Hong Qiao Fei Ji Chang";
boolean rs = false;
for(int i=0;i<str.length();i++){
char z=str.charAt(i);
if('a' == z || 'F' == z) {
rs = true;
break;
}else{
rs= false;
}
}
System.out.println(rs);
}
}
这种方法使用简单直观,但是 难以解决复杂的工作,而且代码量也会增加很多,不利于维护。
这时,我们可以使用正则表达式来实现这些功能,而且代码简单易维护。下面就来介绍了Java中对字符串的正则表达式的几个常用的功能,具体情况如下所示(其中用到了java.util.regex包):
1.Java中在某个字符串中查询某个字符或者某个子字串
- String s = "@Shang Hai Hong Qiao Fei Ji Chang" ;
- String regEx = "a|F" ; //表示a或F
- Pattern pat = Pattern.compile(regEx);
- Matcher mat = pat.matcher(s);
- boolean rs = mat.find();
String s = "@Shang Hai Hong Qiao Fei Ji Chang";
String regEx = "a|F"; //表示a或F
Pattern pat = Pattern.compile(regEx);
Matcher mat = pat.matcher(s);
boolean rs = mat.find();
如果s中有regEx,那么rs为true,否则为flase。
如果想在查找时忽略大小写,则可以写成Pattern pat=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
2.在某个文件中获取一段字符串
- String regEx = ".+/(.+)$" ;
- String s = "c:/test.txt" ;
- Pattern pat = Pattern.compile(regEx);
- Matcher mat = pat.matcher(s);
- boolean rs = mat.find();
- for ( int i= 1 ;i<=mat.groupCount();i++){
- System.out.println(mat.group(i));
- }
String regEx = ".+/(.+)$";
String s = "c:/test.txt";
Pattern pat = Pattern.compile(regEx);
Matcher mat = pat.matcher(s);
boolean rs = mat.find();
for(int i=1;i<=mat.groupCount();i++){
System.out.println(mat.group(i));
}
以上的执行结果为test.txt,提取的字符串储存在mat.group(i)中,其中i最大值为mat.groupCount();
3.对字符串的分割
- String regEx= ":" ;
- Pattern pat = Pattern.compile(regEx);
- String[] rs = pat.split( "aa:bb:cc" );
String regEx=":";
Pattern pat = Pattern.compile(regEx);
String[] rs = pat.split("aa:bb:cc");
执行后,r就是{"aa","bb","cc"}
如果用正则表达式分割就如上所示,一般我们都会使用下面更简单的方法:
- String s = "aa:bb:cc" ;
- String[] rs=s.split( ":" );
String s = "aa:bb:cc";
String[] rs=s.split(":");
4.字符串的替换/删除
- String regEx= "@+" ; //表示一个或多个@
- Pattern pat=Pattern.compile(regEx);
- Matcher mat=pat.matcher( "@@aa@b cc@@" );
- String s=mat.replaceAll( "#" );
String regEx="@+"; //表示一个或多个@
Pattern pat=Pattern.compile(regEx);
Matcher mat=pat.matcher("@@aa@b cc@@");
String s=mat.replaceAll("#");
结果为"##aa#b cc##"
如果要把字符串中的@都给删除,只用要空字符串替换就可以了:
- String s=mat.replaceAll( "" );
String s=mat.replaceAll("");
结果为"aab cc"
注:对Pattern类的说明: 下面的语句将创建一个Pattern对象并赋值给句柄pat:Pattern pat = Pattern.compile(regEx);
当然,我们可以声明Pattern类的句柄,如Pattern pat = null;
2.pat.matcher(str)表示以用Pattern去生成一个字符串str的匹配器,它的返回值是一个Matcher类的引用。
|
附 : 常用的正则表达式: 匹配特定数字: 匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
此文为转帖在学习的时候看到的很不错的文章。 原文地址:http://www.javaeye.com/topic/301465 |