以下代码用户处理sql字符串,将select * from TEMP_STUDENT where AGE=#{age} and SEX=#{sex} and NAME=#{name}" 处理成
select * from TEMP_STUDENT where AGE='20' and SEX='男' and NAME='张三'
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.dxj.test.util.Utils;
public class TestMain {
public static void main(String[] args) {
Apple app = new Apple();
app.setColor("red");
Map map = new HashMap();
map.put("age", "20");
map.put("sex", "男");
map.put("name", "张三");
String s ="select * from TEMP_STUDENT where AGE=#{age} and SEX=#{sex} and NAME=#{name}";
TestMain tm = new TestMain();
String afgerString = tm.processString(s,map);
//System.out.println(afgerString);
}
String processString(String str,Map map){
StringBuffer sb = new StringBuffer();
List<Character> tempList = new ArrayList<Character>();
List<Character> tempListee = new ArrayList<Character>();
int len = str.length();
for(int i=0;i<len;i++){
char c = str.charAt(i);
if(c=='#'){
i=i+1;
char c_next = str.charAt(i);
i=i+1;
if(c_next=='{'){
for(int j=i;j<len;j++,i++){
if(str.charAt(j)=='}'){
String var = Utils.ListToString(tempList);
String value = (String) map.get(var);
tempList.clear();
tempListee.add('\'');
for(int s=0;s<value.length();s++){
tempListee.add(value.charAt(s));
}
tempListee.add('\'');
break;
}else{
System.out.println("dd"+str.charAt(j));
tempList.add(str.charAt(j));
}
}
}
}else{
tempListee.add(c);
}
}
String var1 = Utils.ListToString(tempListee);
System.out.println(var1);
return "";
}
}
工具类
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Utils {
/**
* 定义分割常量 (#在集合中的含义是每个元素的分割,|主要用于map类型的集合用于key与value中的分割)
*/
private static final String SEP1 = "#";
private static final String SEP2 = "|";
/**
* List转换String
*
* @param list
* :需要转换的List
* @return String转换后的字符串
*/
public static String ListToString(List<?> list) {
StringBuffer sb = new StringBuffer();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == null || list.get(i) == "") {
continue;
}
// 如果值是list类型则调用自己
if (list.get(i) instanceof List) {
sb.append(ListToString((List<?>) list.get(i)));
///sb.append(SEP1);
} else if (list.get(i) instanceof Map) {
sb.append(MapToString((Map<?, ?>) list.get(i)));
// sb.append(SEP1);
} else {
sb.append(list.get(i));
// sb.append(SEP1);
}
}
}
return sb.toString();
}
/**
* Map转换String
*
* @param map
* :需要转换的Map
* @return String转换后的字符串
*/
public static String MapToString(Map<?, ?> map) {
StringBuffer sb = new StringBuffer();
// 遍历map
for (Object obj : map.keySet()) {
if (obj == null) {
continue;
}
Object key = obj;
Object value = map.get(key);
if (value instanceof List<?>) {
sb.append(key.toString() + SEP1 + ListToString((List<?>) value));
sb.append(SEP2);
} else if (value instanceof Map<?, ?>) {
sb.append(key.toString() + SEP1
+ MapToString((Map<?, ?>) value));
sb.append(SEP2);
} else {
sb.append(key.toString() + SEP1 + value.toString());
sb.append(SEP2);
}
}
return sb.toString();
}
/**
* String转换Map
*
* @param mapText
* :需要转换的字符串
* @param KeySeparator
* :字符串中的分隔符每一个key与value中的分割
* @param ElementSeparator
* :字符串中每个元素的分割
* @return Map<?,?>
*/
public static Map<String, Object> StringToMap(String mapText) {
if (mapText == null || mapText.equals("")) {
return null;
}
mapText = mapText.substring(1);
mapText = mapText;
Map<String, Object> map = new HashMap<String, Object>();
String[] text = mapText.split("\\" + SEP2); // 转换为数组
for (String str : text) {
String[] keyText = str.split(SEP1); // 转换key与value的数组
if (keyText.length < 1) {
continue;
}
String key = keyText[0]; // key
String value = keyText[1]; // value
if (value.charAt(0) == 'M') {
Map<?, ?> map1 = StringToMap(value);
map.put(key, map1);
} else if (value.charAt(0) == 'L') {
List<?> list = StringToList(value);
map.put(key, list);
} else {
map.put(key, value);
}
}
return map;
}
/**
* String转换List
*
* @param listText
* :需要转换的文本
* @return List<?>
*/
public static List<Object> StringToList(String listText) {
if (listText == null || listText.equals("")) {
return null;
}
listText = listText.substring(1);
listText = listText;
List<Object> list = new ArrayList<Object>();
String[] text = listText.split(SEP1);
for (String str : text) {
if (str.charAt(0) == 'M') {
Map<?, ?> map = StringToMap(str);
list.add(map);
} else if (str.charAt(0) == 'L') {
List<?> lists = StringToList(str);
list.add(lists);
} else {
list.add(str);
}
}
return list;
}
}
利用正则表达式解析字符串
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ParamsParseUtil
{
/**
* @Title: processStr1
* @Description: 将形如where AGE=#{age} and SEX=#{sex}语句转换成where AGE='12' and SEX='男'
* @author 邓小军
* @date 2014-11-28 下午3:47:32
* @return String
* @throws
*/
public static String processStr1(Map map,String str){
Pattern pattern = Pattern.compile("(\\#\\{)(\\w*)(\\})");
Matcher matcher = pattern.matcher(str);
List<String> list = new ArrayList();
while(matcher.find()){
String group = matcher.group(2);
String value = (String) map.get(group);
list.add(value);
}
return processStr2(str,list);
}
public static String processStr2(String str,List<String> list){
Pattern pattern2 = Pattern.compile("(\\#\\{\\w*\\})");
Matcher matcher2 = pattern2.matcher(str);
int i=0;
while(matcher2.find()){
String group = matcher2.group();
str = str.replace(group, "'"+list.get(i)+"'");
i++;
}
return str;
}
}