Java里面通过正则表达式来实现字符串替换
来源:互联网 发布:淘宝开店流程2016 编辑:程序博客网 时间:2024/05/19 23:00
import java.text.MessageFormat;
import java.util.regex.*;
/**
*
* 通过正则表达式来实现字符串替换(2008-08-21)
* 可以实现动态地赋值替换、可以实现对匹配值的部分替换。
* 例子查看main()函数
* @version 1.0 coolmasoft.com
* @author coolma
*
*
*/
public class RegularReplace
{
private String content;
private String regexp;
private String format;
Matcher m =null;
StringBuffer buf = new StringBuffer();
MessageFormat fmt =null;
boolean b=false;
Object[] values=null;
int pointer=0;
public RegularReplace(String content,String regexp)
{
this(content,regexp,"");
}
public RegularReplace(String content,String regexp,String format)
{
this.content=content;
this.regexp=regexp;
this.format=format;
m=Pattern.compile(regexp).matcher(content);
fmt = new MessageFormat(format);
pointer=0;
}
public void reset()
{
m.reset();
buf = new StringBuffer();
pointer=0;
}
public String replaceAll(String newvalue)
{
return m.replaceAll(newvalue);
}
public String replaceAll(int group,String newvalue)
{
reset();
while(find())
{
setGroup(group,newvalue);
replace();
}
return getResult();
}
public boolean find()
{
boolean b= m.find();
values=new Object[m.groupCount()+1];
return b;
}
public void replace(Object[] obj)
{
// System.out.println(format);
replace( fmt.format(obj));//
}
public void replace(String s)
{
//m.appendReplacement(buf, s);//
buf.append( content.substring(pointer,m.start()));
buf.append(s );
pointer=m.end();
}
public int groupCount()
{
return m.groupCount();
}
public void setGroup(int i ,Object o)
{
values[i]=o;
}
public void replace()
{
//先排除重叠的group
for(int i=1;i< values.length;i++)
{
if(values[i]==null) continue;
int start=m.start(i);
int end=m.end(i);
for(int k=0;k<i;k++)
{
if(values[k]==null) continue;
if(start>=m.start(k)&& start<m.end(k))
{
values[i]=null; //设置为空,则不管这个group
//System.out.println("values[i]"+i);
break;
}
}
}
for(int i=0;i< values.length;i++)
{
if(values[i]==null) continue;
int start=m.start(i);
int end=m.end(i);
//System.out.println("pointer="+pointer+"start="+start+"end="+end);
buf.append( content.substring(pointer,start));
buf.append(values[i] );
pointer=end;
}
}
public String getResult()
{
if(!b)
{
//m.appendTail(buf);
buf.append(content.substring(pointer));
b=true;
}
return buf.toString();
}
public static void main(String[] args)
{
//-- 全部替换为一常量 ,和String.replaceAll()一致
RegularReplace rr=new RegularReplace("a1b2c3d3e3","[^c]3");
System.out.println(rr.replaceAll("-"));
//-- 全部替换某一组为一常量 (注意 group=0表示整个匹配串,从group=1开始才是真正的组
rr=new RegularReplace("*abc*abc*","a(b)(c)");
System.out.println(rr.replaceAll(1,"-"));
//-- 全部替换为动态值
rr=new RegularReplace("*abc*abc*","a(b)(c)");
int n=0;
while(rr.find())
{
rr.replace("ME"+n);
n++;
}
System.out.println(rr.getResult());
//-- 全部替换某几个组为动态值
rr=new RegularReplace("*abc*abc*","a(b)(c)");
while(rr.find())
{
rr.setGroup(1, "B"+n);
rr.setGroup(2, "C"+n);
rr.replace();
n++;
}
System.out.println(rr.getResult());
}
}
/*
运行的输出结果:
a1b2c3--
*a-c*a-c*
*ME0*ME1*
*aB2C2*aB3C3*
*/
- Java里面通过正则表达式来实现字符串替换
- java正则表达式替换字符串
- 正则表达式实现替换字符串封装类
- Java中使用正则表达式来实现字符串匹配
- JAVA正则表达式替换字符串问题
- 正则表达式替换字符串
- java 正则表达式替换
- Java 正则表达式替换
- java正则表达式替换
- java 正则表达式替换
- java正则表达式替换
- EditPlus正则表达式替换字符串
- 正则表达式 替换字符串 [javascript]
- notepad2正则表达式替换字符串
- Notepad++ 正则表达式替换字符串
- Oracle正则表达式替换字符串
- asp常用的正则表达式实现字符串的替换
- Java 正则表达式--字符串匹配、切割、与替换
- 最简便的备份MySql数据库方法方案
- VS快捷键
- 女人一生最温馨的片段
- 关于汇总
- JS---Cookies完整介紹 申精!
- Java里面通过正则表达式来实现字符串替换
- WinForm资源文件
- 对SAP的深刻理解
- 一个奇怪的bug
- java日期
- 经典正则表达式
- virtualhost-网络初学
- set_time_limit (int seconds) 说明
- GridView1移上去后背景变色效果