你的位置:首页 > Java教程

[Java教程]Java中实现类似javascript中传入函数正则替换


javascript中可以这样做 
Js代码  收藏代码

  1. var str = "abcdefg123hijk567";  
  2. var str2 = str.replace( /([a-z]+)(\d+)/g,function( a , $1 , $2, $3 ){  
  3.      return $2 + $1; //交换数字和字母的位置  
  4. });  
  5. console.info( str2 );  
  6. // 显示的是: 123abcdefg567hijk  



java中可以定义一个TextUtil来实现上述功能,最终可以这样调用 
Java代码  收藏代码

  1. public class TextTest {  
  2.     public static void main(String[] args) {  
  3.         String str = "abcdefg123hijk567";  
  4.            
  5.         String result = TextUtil.repalce(str, "([a-z]+)(\\d+)", new Function<String, Matcher>() {  
  6.                
  7.             @Override  
  8.             public Object apply(String matchedText, Matcher matcher) {  
  9.                   
  10.                 return matcher.group( 2 ) + matcher.group( 1 );  
  11.             }  
  12.         });  
  13.         System.out.println( result );  
  14.     }  
  15. }  



TextUtil 
Java代码  收藏代码

  1. public class TextUtil {  
  2.   
  3.   
  4.   
  5.     public static String repalce( String str , Pattern pattern , Function<String ,Matcher  > fun){  
  6.         Matcher matcher = pattern.matcher( str );  
  7.         String all = null ;   
  8.         StringBuffer sb =new StringBuffer();  
  9.         while( matcher.find()){  
  10.             all = matcher.group(0);   
  11.             String replace = (String)fun.apply( all , matcher );              
  12.             matcher.appendReplacement(sb, replace==null?"":replace );  
  13.         }  
  14.         matcher.appendTail(sb);   
  15.         return sb.toString();    
  16.     }  
  17.     public static String repalce( String str , String pattern , Function<String ,Matcher  > fun){  
  18.          Pattern p  = Pattern.compile( pattern);  
  19.          return repalce( str , p ,fun);  
  20.        
  21.     }  
  22.   
  23. }  



Function 
Java代码  收藏代码

  1. public interface Function<T,K> {  
  2.     public Object apply(T t,K k);  
  3. }  
  4.    


 获取【下载地址】