首页 > 代码库 > Java正则表达式实现字符串的动态多替换
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 * <li>Description:</li>30 * <li>Date:</li>31 * <li>Modify:</li>32 * <li>Version: 1.0</li>33 * @author Administrator34 * @param form35 * @param last36 * @return String37 */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<Integer, String> map=new LinkedHashMap<Integer,String>();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<ss.length;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<Integer, String> entry=(Map.Entry<Integer, String>)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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。