package com.ycsoft.daos.helper; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * 提供对字符串处理的类,扩展了apache StringUtils * </p> * */ public class StringHelper extends org.apache.commons.lang.StringUtils { private static Pattern p = Pattern.compile("\\{\\d+\\}"); /** * <p> * 根据参数的类型,解析含有占位符的字符串, * 字符类型按:'参数'的格式替换 数字类型不加任何字符直接替换 * </p> * * @param sql * 需要格式化的字符串 * @param params * 要替换的可变参数 * @return 格式化后的字符串 */ public static String format(String source, Object... params) { return parses(source,"'",params); } /** * <p> * 忽略参数的类型,按照给定的startChar,endChar替换字符串 * </p> * * @param source * 源字符串 * @param start * 参数首位需要加的字符 * @param end * 参数后面需要添加的字符 * @param params * 根据占位符给定的参数 * @return */ public static String formatIgnoreType(String source, Object... params) { return parses(source,"",params); } /** * <p> 功能:格式化带有'{0}'占位符的字符串 </p> * @param source 源字符串 * @param split 添加在目标匹配的字符串开始和结尾的字符 * @param params 可变的参数,根据{0}的个数传入相应的参数值 * @return 格式化后的字符串 */ private static String parses(String source,String split,Object... params){ Matcher m = p.matcher(source); int i = 0; int endIndex = 0; StringBuffer buf = new StringBuffer(); while (m.find()) { String p = "''"; if (params[i] != null){ if (params[i] instanceof String || params[i] instanceof Date || params[i] instanceof Character) p =split+params[i++].toString() + split; else p =params[i++].toString(); endIndex = m.end(); } m.appendReplacement(buf,p); } if (endIndex > 0)buf.append(source.substring(endIndex)).toString(); else return source; return buf.toString(); } }