需求场景:

  今天在处理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 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<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. }

Java正则表达式实现字符串的动态多替换的更多相关文章

  1. js与java正则表达式处理字符串问题

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码.合理使用正则表达式确实会为程序员省去很多字 ...

  2. java正则表达式:验证字符串数字

    正则表达式:^([0-9]+)$ -> ^:匹配以0-9开头,[0-9]:匹配0-9数字,+:匹配至少一个数字,$:匹配以数字结尾 /** *正则表达式:验证字符串数字 *两种方式: *1.pa ...

  3. 使用Java正则表达式提取字符串中的数字一例

    直接上代码: String reg = "\\D+(\\d+)$"; //提取字符串末尾的数字:封妖塔守卫71 == >> 71 String s = monster. ...

  4. Java——正则表达式(字符串操作)

     public class Test1 { /* * 正则表达式:对字符串的常见操作: * 1.匹配: *  其实是用的就是string类中的matches(匹配)方法. * 2.切割 *  其实 ...

  5. Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

    目录 正则表达式 基本正则表达式 扩展正则表达式 grep tr diff du wc find 正则表达式 正则表达式,又称正规表示法.常规表示法( Regular Expression,在代码中常 ...

  6. java 正则表达式匹配字符串

    private static List<String> getImage(String str){ List<String> tmp=new ArrayList<Stri ...

  7. java正则表达式(字符串)

    参考:http://blog.csdn.net/kdnuggets/article/details/2526588 补充: ?号的使用: ^/branch/([a-z]+[/]?)$  可以匹配 /b ...

  8. java 正则表达式 验证字符串 只包含汉字英文数字

    String content = “testContent”; String regex="^[a-zA-Z0-9\u4E00-\u9FA5]+$"; Pattern patter ...

  9. java高级-动态注入替换类Instrumentation

    介绍 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 Java SE 5 的新特性. 使用 Instrumentation,开发者可以构 ...

随机推荐

  1. [转]Eclipse启动Tomcat时45秒超时解决方法

    原文地址:http://it.oyksoft.com/post/6577/ Eclipse启动Tomcat时,默认配置的启动超时时长为45秒.假若项目启动超过45秒将会报错.两种解决方法:1.改XML ...

  2. 在哪可以Sigmaplot 13下载免费版的

    SigmaPlot是一款科学的数据分析和绘图软件,可以进行精密绘图.数据分析.自动化管理数据和创建网络图表,具备制作和发行品质图表的水平,该软件被广泛地运用在多个领域.现今SigmaPlot软件日益受 ...

  3. hihoCoder #1445 : 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  4. 移动端设置-----rem

    对于现在不同尺寸的移动端屏幕,如果设置px来说实在有点影响用户体验,在小屏幕上太大,大屏幕上太小,不能实现响应式,所以就引进了rem的概念. rem是相对于根元素<html> 在我的项目中 ...

  5. centos6 install mcrypt

    Download the latest epel-release rpm from http://dl.fedoraproject.org/pub/epel/6/x86_64/ Install epe ...

  6. WinForm------GridControl合并单元格

    1.修改GridView的属性 2.点击Run Design修改需要合并的列的属性 3.给GridView添加事件(以上两步不行的情况下再使用此方法) private void gridView1_C ...

  7. Dom4j把xml转换成Map(固定格式)

    /** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...

  8. Trie tree实践

    1.Trie树 Trie树即字典树或前缀树, 2.实践 代码实践如下: package cn.edu.buaa.trie; import java.util.HashSet; /** * @autho ...

  9. rsync快速删除海量文件

    rsync --delete-before -avH --progress --stats /tmp/empty/ /var/spool/postfix/maildrop/ 由于业务侧使用时,一些脚本 ...

  10. javascript设置和获取cookie的通用方法

    //获取cookie  function getCookieValue(cookieName)  {     var cookieValue = document.cookie;     var co ...