package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test1 {
public static void main(String[] args) {
String hql = " from Users abc by type order by id abc limit 0,3";
removeOrders(hql);
}
/**
* 使用Matcher.appendReplacement(String str1, String str2)时要注意,最好这样用:
Matcher.appendReplacement(String str1, String str2.replaceAll("\\\\", "\\\\\\\\").replaceAll("\\$", "\\\\\\$"));
1replaceAll("\\\\", "\\\\\\\\")是为了把"\"符号加上,如果不进行这部处理,"\"符号就会被删除!
2replaceAll("\\$", "\\\\\\$")是为了把"$"符号转义,因为"$"后加数字是表示第几组的意思!
* @param hql
* @return
*/
private static String removeOrders(String hql){
// Assert.hasText(hql);
Pattern p=Pattern.compile("abc",Pattern.CASE_INSENSITIVE);
Matcher m=p.matcher(hql);
StringBuffer sb=new StringBuffer();
//find()方法表示是否有符合的字符串,group()方法则可以将符合的字符串返回
while(m.find()){
System.out.println(m.group());
//将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。
//appendReplacement方法先添加字符串中从当前位置到下一个 匹配位置之间的所有字符,然后添加替换值。
m.appendReplacement(sb,"ttitfly");
System.out.println(sb.toString());
}
//将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。
//appendTail添加的 是字符串中从最后一次匹配的位置之后开始,直到结尾的部分
m.appendTail(sb);
System.out.println(sb.toString());
return sb.toString();
}
}
输出结果:
abc
from Users ttitfly
abc
from Users ttitfly by type order by id ttitfly
from Users ttitfly by type order by id ttitfly limit 0,3