/** * <h1>根据表达式格式化字符串</h1> * @param oldString * @param open * @param close * @param paramMap * @param params * @return java.lang.String * @date 2020/7/30 20:31 * @author dengyw */ public final static String formatString( String oldString , String open , String close , Map<String, Object> paramMap , Object... params){ if(MapUtils.isBlank(paramMap) && ArrayUtils.isBlank(params)){ return oldString; } StringBuilder stringBuilder = new StringBuilder(); int stringParamIndex = 0; int openIndex = oldString.indexOf(open); int closeIndex = oldString.indexOf(close); if(ObjectUtils.isNull(paramMap)){ paramMap = new HashMap<>(); } int index = 0; for (Object param : params) { paramMap.put(String.valueOf(index), param); index++; } while (openIndex >= 0 && closeIndex > 0){ String startString = oldString.substring(0, openIndex); stringBuilder.append(startString); String format = oldString.substring(openIndex + open.length(), closeIndex); Object value = null; boolean isValue = false; if(isBlank(format) && ArrayUtils.isNotBlank(params)){ if(stringParamIndex < params.length){ value = params[stringParamIndex]; isValue = true; } stringParamIndex++; } else if (MapUtils.isNotBlank(paramMap)){ String[] formats = format.split("\\."); int length = formats.length; value = paramMap; String formatStr; for (int i = 0; i < length; i++) { formatStr = formats[i]; try { if(value instanceof Map){ Map map = ((Map)value); value = map.get(formatStr); } else if (value instanceof List) { List list = ((List)value); int ind = Integer.valueOf(formatStr); value = list.get(ind); } else if (value instanceof Set) { Set set = ((Set)value); int ind = Integer.valueOf(formatStr); int ind1 = 0; for (Object o : set) { if(ind == ind1){ value = o; } ind1++; } } else if (value.getClass().isArray()) { Object[] array = (Object[]) value; int ind = Integer.valueOf(formatStr); value = array[ind]; } else { value = ClassUtils.getFieldOrMethodValue(value, formatStr); } } catch (Exception e){ throw new TinyRuntimeException(TinyCoreErrorEnum.FORMAT_STRING_NOT_FOUND_ERROR, new Object[]{format, formatStr}, e); } if(i >= length - 1){ isValue = true; } else if (ObjectUtils.isNull(value)){ throw new TinyRuntimeException(TinyCoreErrorEnum.FORMAT_STRING_ERROR, new Object[]{format, formatStr}); } } } if (isValue) { if(ObjectUtils.isNotNull(value)){ if(value instanceof Class){ value = ((Class<?>)value).getName(); } if(value instanceof Method){ value = ((Method)value).getName(); } else { value = ArrayUtils.toString(value); } } } else { value = oldString.substring(openIndex, closeIndex + close.length()); } stringBuilder.append(value); oldString = oldString.substring(closeIndex + 1); openIndex = oldString.indexOf(open); closeIndex = oldString.indexOf(close); } if(StrUtils.isNotBlank(oldString)){ stringBuilder.append(oldString); } return stringBuilder.toString(); }
根据表达式格式化字符串
最新推荐文章于 2024-08-07 09:14:10 发布