package message.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 进行字符串的格式化,
* 格式化字符串,替换{0}{1}...
*
* @author sunhao(sunhao.java@gmail.com)
* @version V1.0
* @createTime 2012-3-14 下午08:26:53
*/
public class ReplaceStringUtils {
private static final Logger logger = LoggerFactory.getLogger(ReplaceStringUtils.class);
/**
* 左括号
*/
private final static String LEFT_BRACE = "{";
/**
* 右括号
*/
private final static String RIGTH_BRACE = "}";
/**
* 私有化构造器
*/
private ReplaceStringUtils(){}
/**
* 格式化字符串,替换{0}{1}...,如果不成功,则默认返回原字符串
*
* @param formatString 需要格式化的字符串
* @param args 参数
* @return
*/
public static String replace(String formatString, Object[] args){
String result = replace(formatString, args, StringUtils.EMPTY);
return StringUtils.isEmpty(result) ? formatString : result;
}
/**
* 格式化字符串,替换{0}{1}...,如果不成功,则返回defaultVlaue
*
* @param formatString 需要格式化的字符串
* @param args 参数
* @param defaultValue 如果不成功,返回的字符串
* @return
*/
public static String replace(String formatString, Object[] args, String defaultValue){
/*if(!(StringUtils.isEmpty(formatString) || !(formatString.indexOf(LEFT_BRACE) == -1 || formatString.indexOf(RIGTH_BRACE) == -1)
|| args == null || args.length < 1)){
logger.error("the formatString, args, defaultValue is required! please check given paramters are all right!");
return StringUtils.EMPTY;
}*/
if(StringUtils.isEmpty(formatString) || formatString.indexOf(LEFT_BRACE) == -1 || formatString.indexOf(RIGTH_BRACE) == -1
|| args == null || args.length < 1){
logger.error("the formatString, args, defaultValue is required! please check given paramters are all right!");
return StringUtils.EMPTY;
}
/**
* 第一个'{'的位置
*/
int firstLeftBrace = formatString.indexOf(LEFT_BRACE);
/**
* 最后一个'}'的位置
*/
int lastRightBrace = formatString.lastIndexOf(RIGTH_BRACE);
/**
* 第一个'{'后面的那个数字
*/
String first = formatString.substring(firstLeftBrace + 1, firstLeftBrace + 2);
/**
* 最后一个'}'后面的那个数字
*/
String last = formatString.substring(lastRightBrace - 1, lastRightBrace);
/**
* 第一个序号和最后一个序号
*/
int firstSequence = Integer.parseInt(first);
int lastSequence = Integer.parseInt(last);
/**
* {0}{1}...的个数与给定的值个数不一致,或者{0}{1}...不是按照这样递增的,那么返回错误,
* 否则进行替换
*/
if(!((lastSequence - firstSequence + 1) < 0 || (lastSequence - firstSequence + 1) != args.length)){
/**
* 替换规则:
* 给定值的第一个值替换{0},以此类推
*/
for(int j = 0; j < args.length; j++){
formatString = formatString.replace("{" + j + "}", args[j] + "");
}
} else {
if(logger.isWarnEnabled()){
logger.warn("foramtString has '{}' barces, but you given '{}' paramters!",
lastSequence - firstSequence + 1, args.length);
}
return defaultValue;
}
if(logger.isDebugEnabled()){
logger.debug("format successed! the result is '{}'", formatString);
}
return formatString;
}
}