Java正则表达式实现字符串的动态多替换

  需求场景:

  今天在处理SQL语句的时候,由于数据库中存的格式是VARCHAR2型的,这就需要对SQL语句中WHERE条件后边的带数字的字符串加上单引号,对于字符串的处理,首先想到的就是正则表达式,对正则表达式,虽然有一些了解,但是也谈上很熟练,百度了一番(正常网络也就那个几个无奈的搜索引擎使用啦),发现替换,基本上属于固定替换,就是把某一类符合正则标准的,全部替换为一个固定的字符串,比如说,错别字的处理啊,还是比较好用的,这个在程序中也有实现,很easy。但是,我需要的是多个,且是动态替换的,最基本的就是保留原来的匹配出来的串,然后再在首尾加上些东西。我大致搜索了一下,没发现一个满足我要求的。好吧,那就自己动手,丰衣足食吧。

  解决方案:

  简单说说我的思路,我是将字符串,进行了两次分割,一次匹配出满足正则表达式的串,一次匹配出不满足正则的串,这样他们总是相间的出现的,这样我就可以随意的操作匹配或者非匹配的串,然后再把他们何到一起。

  上源码:

 1 package com.util.regex;
 2 
 3 import java.util.Iterator;
 4 import java.util.LinkedHashMap;
 5 import java.util.Map;
 6 import java.util.regex.Matcher;
 7 import java.util.regex.Pattern;
 8 
 9 public class RegexUtil {
10     private String strSource="";
11     private String StrRe="";
12     
13     public String getStrSource() {
14         return strSource;
15     }
16     public void setStrSource(String strSource) {
17         this.strSource = strSource;
18     }
19     public String getStrRe() {
20         return StrRe;
21     }
22     public void setStrRe(String strRe) {
23         StrRe = strRe;
24     }
25     public String flixedReplace(String rep){
26         return this.strSource.replaceAll(this.StrRe, rep);
27     }
28     /**
29      * 
  • Description:
  • 30 *
  • Date:
  • 31 *
  • Modify:
  • 32 *
  • Version: 1.0
  • 33 * @author Administrator 34 * @param form 35 * @param last 36 * @return String 37 */ 38 @SuppressWarnings("unchecked") 39 public String splitReplace(String form,String last){ 40 String ss[]=this.getStrSource().split(this.getStrRe()); 41 Pattern p = Pattern.compile(this.getStrRe()); 42 Matcher m = p.matcher(this.getStrSource()); 43 LinkedHashMap map=new LinkedHashMap(); 44 int i=0; 45 while(m.find()){ 46 map.put(i, form+m.group()+last); 47 i++; 48 } 49 Iterator iter=map.entrySet().iterator(); 50 StringBuffer tarStr=new StringBuffer(); 51 for(int j=0;j){ 52 if(!this.getStrSource().isEmpty()&&(!Character.isDigit(this.getStrSource().charAt(0))||j!=0)){ 53 tarStr.append(ss[j]); 54 } 55 if(iter.hasNext()){ 56 Map.Entry entry=(Map.Entry)iter.next(); 57 if(entry.getKey()==j){ 58 tarStr.append(entry.getValue()); 59 } 60 } 61 } 62 return tarStr.toString(); 63 } 64 65 public static void main(String[] args) { 66 RegexUtil re=new RegexUtil(); 67 re.setStrSource(" 2132 3213 adsd 12321 asdfsa dsdf 12 1313adfaf231321dfafda1141dfaffafdf"); 68 re.setStrRe("\\d+"); 69 System.out.println(re.flixedReplace("hello")); 70 System.out.println(re.splitReplace("'", "'")); 71 // System.out.println(re.getStrSource().replaceAll("(\\w+)(\\d+)", "$1'$2")); 72 } 73 }

     

    转载于:https://www.cnblogs.com/accipiter/p/3896069.html

    你可能感兴趣的:(Java正则表达式实现字符串的动态多替换)