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 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正则表达式实现字符串的动态多替换,布布扣,bubuko.com

时间: 2024-10-16 23:00:31

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

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

String content = “testContent”; String regex="^[a-zA-Z0-9\u4E00-\u9FA5]+$"; Pattern pattern = Pattern.compile(regex); Matcher match=pattern.matcher(content); boolean b=match.matches(); if(b) { Toast.makeText(this, "success...", Toast.L

JAVA 正则表达式截取字符串小例子

例如:从如下字符串 营业时间: 11:30-21:30 修改 分类标签: 无线上网(8) 可以刷卡(7) 朋友聚餐(5) 家庭聚会(5) 商务宴请(4) 情侣约会(4) 可自带酒水(2) 中获取: 11:30-21:30 两个数字:两数字-两个数字:两个数字 因此 正则表达式:\\d{2}:\\d{2}-\\d{2}:\\d{2} 具体代码如下: import java.util.regex.Matcher; import java.util.regex.Pattern; public clas

JS使用replace()方法和正则表达式进行字符串的搜索与替换实例

1.JS字符串的替换及replace()方法的使用 replace(regexp,replacement)方法有两个参数,第一参数可以是一个纯文本字符串或是一个RegExp对象,具体请看RegExp对象的使用:第二个参数可是一个字符串也可以是一个函数. 以下是JS字符串替换的举例: 例1: var str="Hello world!"; document.write(str.replace(/world/, "phper")); 例2: var reg=new Re

Java正则表达式获得字符串中数字

下面通过一个小范例来学习如何获得一个字符串中的数字 import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static void main(String[] args) { String strInput = "[email protected];33"; String regEx = "[^0-9]";//匹配指定范围内的数字 //Pat

java正则表达式提取字符串中的数字

http://stackoverflow.com/questions/2367381/extract-numbers-from-a-string-java Pattern p = Pattern.compile(\\d+); 使用这个会有空字符串出现 Pattern p = Pattern.compile("-?\\d+"); 这是OK,

使用Java正则表达式提取字符串末尾的数字一例

直接上代码: String reg = "\\D+(\\d+)$"; //提取字符串末尾的数字:封妖塔守卫71 == >> 71 String s = monster.getMonsterName(); Pattern p2 = Pattern.compile(reg); Matcher m2 = p2.matcher(s); int historyHighestLevel = 1; if(m2.find()){ historyHighestLevel = Integer.

java中String字符串的替换函数:replace与replaceAll的区别

例如有如下x的字符串 String x = "[kllkklk\\kk\\kllkk]";要将里面的“kk”替换为++,可以使用两种方法得到相同的结果 replace(CharSequence target, CharSequence replacement)       ——          x.replace("kk", "++") replaceAll(String regex, String replacement)       —— 

使用正则表达式,字符串的批量替换

1.1 使用正则表达式,字符串的批量替换. 今天遇到一个问题,需要把表里的附件名称做换行处理,直接替换换行符即可,代码如下: data.FILE_NAMES = data.FILE_NAMES.replace(/:/g, '\r\n'); 这里是把“:”替换成了“\r\n”,/g是指全局的意思,如果这么写,则只会替换第一个冒号 data.FILE_NAMES=data.FILE_NAMES.replace(":","\r\n");

java 中的字符串处理--正则表达式

最近在做一些支付报文处理工作,需要从各种各样的报文中提取需要的信息比如(金额,订单号...),每个渠道报文各式各样,想要写一个通用的提取逻辑,于是就回顾java正则表达式的用法.当然我们可以自己写一些算法,去提取这些字段,但对于简单的解析来说,亲自手写算法有点杀鸡用牛刀的感觉,而且正则表达式完全可以满足大部分的字符提取需求.好了闲话不多说,先列出正则表达式的常用语法: \:表示下一个字符为特殊含义的字符例如:\d匹配数字 ^:表示匹配字符开始的位置例如:^#.*:匹配以#开头的所有字符 $:表示