package com.yanzuoguang.util; import com.yanzuoguang.util.base.ObjectHelper; import com.yanzuoguang.util.helper.StringHelper; import com.yanzuoguang.util.printer.PrinterFormatHandle; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 构造函数 * * @author 颜佐光 */ public class PrinterHelper { /** * 进行字段格式化处理 * * @param format 需要处理得格式字符串 * @param defaultField 默认字段 * @param fieldFormatHandle 对字段进行格式化处理 * @return 处理之后得值 */ public static String getFormat(String format, String defaultField, PrinterFormatHandle fieldFormatHandle) { StringBuilder sb = new StringBuilder(); Pattern reg = Pattern.compile("\\{(\\S+?)\\}"); Matcher matches = reg.matcher(format); int start = 0; while (matches.find()) { int len = matches.start() - start; if (len > 0) { sb.append(format.substring(start, matches.start())); } String fieldFull = matches.group(1); if (fieldFull.startsWith("0")) { fieldFull = defaultField + fieldFull.substring(1); } String[] fields = fieldFull.split(":"); String field = fields[0]; String fieldFormat = StringHelper.EMPTY; if (fields.length > 1) { fieldFormat = fieldFull.substring(field.length() + 1); } fieldFormatHandle.addPos(sb, fieldFull, field, fieldFormat); start = matches.end(); } sb.append(format.substring(start)); return sb.toString(); } /** * 将数据格式化为新得数据 * * @param resultTo 结果数据 * @param resultFrom 结果来源 * @param format 格式化 * @param defaultField 默认字段 * @return */ public static String getFormatTo(Map resultTo, Object resultFrom, String format, String defaultField) { return getFormat(format, defaultField, new PrinterFormatHandle() { @Override public void addPos(StringBuilder sb, String fieldFull, String field, String fieldFormat) { sb.append("{"); Object fieldValue = ObjectHelper.get(resultFrom, field); if (!StringHelper.isEmpty(fieldFormat)) { field = StringHelper.md5(fieldFull); } sb.append(field); resultTo.put(field, fieldValue); sb.append("}"); } }); } /** * 获取结果字符串,调用本方法前请先调用getFormatTo函数 * * @param resultFrom 来源字符 * @param format 格式化字符串 * @return */ public static String getResult(Object resultFrom, String format) { return getFormat(format, StringHelper.EMPTY, new PrinterFormatHandle() { @Override public void addPos(StringBuilder sb, String fieldFull, String field, String fieldFormat) { Object fieldValue = ObjectHelper.get(resultFrom, field); sb.append(fieldValue); } }); } }