package com.mtools.core.plugin.helper; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; @SuppressWarnings("rawtypes") public class Auxs { final public static String MONLOGNAME = "aux.monitor.log"; final public static String TRXLOGNAME = "aux.trans.log"; final public static SimpleDateFormat Y4M2D2 = new SimpleDateFormat("yyyyMMdd"); final public static SimpleDateFormat Y2M2D2 = new SimpleDateFormat("yyMMdd"); final public static SimpleDateFormat M2D2 = new SimpleDateFormat("MMdd"); final public static SimpleDateFormat DTREAD = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final public static SimpleDateFormat YMDHMS = new SimpleDateFormat("yyyyMMddHHmmss"); final public static SimpleDateFormat YMDHMSL = new SimpleDateFormat("HHmmssSSS"); final public static SimpleDateFormat HHMMSS = new SimpleDateFormat("HHmmss"); final public static SimpleDateFormat Y2M2D2HMSL = new SimpleDateFormat("yyyyMMddHHmmssSSS"); public static int count = 0; public static String GBK = "GBK"; final public static long DAY_MILL = (24 * 60 * 60 * 1000); final public static String STR62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; final public static int RADIX62 = 62; final public static Pattern ptn = Pattern.compile("[^0-9]"); public static Logger lg = Logger.getLogger(Auxs.class); public static Logger MONLOG = Logger.getLogger(MONLOGNAME); public static Logger TRXLOG = Logger.getLogger(TRXLOGNAME); public static void main(String[] args) { try { // System.out.println(getBean("testBeanXmlMap")); // System.out.println(springProp(LoginRq.class, "cib.login")); String str = toStr62(9998, 3); System.out.println(str); System.out.println(fromStr62(str)); System.out.println(Auxs.pureDT("2008-123-123:33T233")); System.out.println(yuan2Fen("0.10")); str="abcd一二三四五六七八九十甲乙丙丁"; CharsetEncoder ce=Charset.forName("GBK").newEncoder(); System.out.println(ce.maxBytesPerChar()+" "+ce.averageBytesPerChar()); str="abc"; System.out.println(limitStrEx("GBK", str, 12,false)+"|"); } catch (Exception e) { e.printStackTrace(); } } public static boolean isSimpleClz(Class clz) { return String.class.equals(clz) ||StringBuffer.class.equals(clz) ||StringBuilder.class.equals(clz) ||isBasicClz(clz); } public static boolean isBasicClz(Class clz) { return clz.isPrimitive()||isPrimitiveWrap(clz); } public static boolean isPrimitiveWrap(Class clz) { try { return ((Class) clz.getField("TYPE").get(null)).isPrimitive(); } catch (Throwable e) { return false; } } public static String ev(String[] strs, int i, String defval) { if (strs.length > i) return strs[i]; else return defval; } public static Object ev(Map m, Object key, Object def) { Object o = m.get(key); if (o == null) return def; else return o; } public static Object fetch(Map<String, Object> m, String name, Object def) { Object o = m.get(name); if (o == null) return def; else return o; } public static void sleep(long lt) { try { Thread.sleep(lt); } catch (InterruptedException e) { lg.error("Sleeping Error:" + e.getMessage(), e); Auxs.MONLOG.error("Sleeping Error:" + e.getMessage(), e); } } public static String right(String src, int len) { return src.substring(src.length() - len); } public static String limitStr(String charset, String src, int len) { return limitStrEx(charset, src, len, false); } public static byte[] rPadB(byte[] ba, int b, int len) { if (len <= ba.length) return ba; byte[] rb = new byte[len]; System.arraycopy(ba, 0, rb, 0, ba.length); for (int i = ba.length; i < len; ++i) rb[i] = (byte) (b & 0xFF); return rb; } public static byte[] trimb(byte[] ba, int b) { int start = 0, end = 0, i; for (i = 0; i < ba.length; ++i) { if ((ba[i] & 0xFF) != (b & 0xFF)) { start = i; break; } } for (i = ba.length; i > 0; --i) { if ((ba[i - 1] & 0xFF) != (b & 0xFF)) { end = i; break; } } if (start == 0 && end == ba.length) return ba; byte[] rb = new byte[end - start]; System.arraycopy(ba, start, rb, 0, end - start); return rb; } public static byte[] trimb(byte[] ba) { return trimb(ba, 0); } public static String replace(String str, int start, int end, String strrep) { StringBuilder sb = new StringBuilder(end); sb.append(StringUtils.substring(str, 0, start)).append(strrep).append(StringUtils.substring(str, end)); return sb.toString(); } public static byte[] lPadB(byte[] ba, int b, int len) { if (len <= ba.length) return ba; byte[] rb = new byte[len]; System.arraycopy(ba, 0, rb, len - ba.length, ba.length); for (int i = 0; i < len - ba.length; ++i) rb[i] = (byte) (b & 0xFF); return rb; } public static int indexOfIg(String[] strs, String toFind) { if (strs == null) return -1; for (int i = 0; i < strs.length; ++i) { if (toFind == null && strs[i] == null || toFind.equalsIgnoreCase(strs[i])) return i; } return -1; } public static String underscoreName(String name) { StringBuilder result = new StringBuilder(); if (name != null && name.length() > 0) { result.append(name.substring(0, 1).toLowerCase()); for (int i = 1; i < name.length(); i++) { String s = name.substring(i, i + 1); if (s.equals(s.toUpperCase()) && Character.isLetter(s.charAt(0))) { result.append("_"); result.append(s.toLowerCase()); } else { result.append(s); } } } return result.toString(); } public static String limitStrEx(String charset, String src, int len, boolean fromEnd) { boolean checklen=false; int tmplen; String tmp=""; byte[] bs; Charset cs=null; if(src==null) return null; try { cs=Charset.forName(charset); } catch(Throwable t) { t.printStackTrace(); return src.substring(0,len/4); } try { bs=src.getBytes(cs); if(bs.length<len) return src; if(fromEnd) tmp=new String(bs,bs.length-len,len,cs); else tmp=new String(bs,0,len,cs); //System.out.println(tmp+"<--"); tmplen=tmp.length(); checklen=true; } catch(Throwable ex) { ex.printStackTrace(); tmplen=(int) (len/cs.newEncoder().maxBytesPerChar()); } if(fromEnd) tmp=src.substring(src.length()-tmplen); else tmp=src.substring(0,tmplen); if(checklen&&tmp.getBytes(cs).length>len) { if(fromEnd) tmp=src.substring(src.length()-tmplen+1); else tmp=src.substring(0,tmplen-1); } return tmp; } public static void arraySet(byte[] dst, int pos, int len, byte ch) { for (int i = 0; i < len; ++i) dst[pos + i] = ch; } public static String gbkLPad(String str, int len, char ch) { return localPad(str, len, ch, false, "GBK"); } public static String gbkRPad(String str, int len, char ch) { return localPad(str, len, ch, true, "GBK"); } /** * 字符串填充,字符串超过len长度的内容会截掉 * * @param src * 要填充的字符串 * @param ch * 填充的字符 * @param len * 总长度,按照字节计算 * @param charset * 编码 * @param isRight * 右填充 * @return src为空时,返回null 否则按照填充的返回 * **/ public static String padString(String src, char ch, int len, String charset, boolean isRight) { if (src == null) { return src; } String dst = ""; int pos = 0; int srclen = 0; try { srclen = src.getBytes(charset).length; if (srclen > len) { for (int i = 0; i < len; i++) { String tmp = src.substring(pos, pos + 1); if (tmp.getBytes(charset).length > 1) {// 汉字 i++; } if (i < len) { dst += tmp; } pos++; } } else if (srclen < len) { dst = src; } else { dst = src; } String tmp = ""; int dstlen = dst.getBytes(charset).length; for (int i = 0; i < len - dstlen; i++) { tmp += ch; } if (isRight) { dst += tmp; } else { dst = tmp + dst; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return dst; } public static byte[] bPad(byte[] b, int len, byte pb, boolean isRight) { byte[] br = new byte[len]; if (isRight) { System.arraycopy(b, 0, br, 0, b.length); arraySet(br, b.length, len - b.length, pb); } else { arraySet(br, 0, len - b.length, pb); System.arraycopy(b, 0, br, len - b.length, b.length); } return br; } public static byte[] bLPad(byte[] b, int len, byte pb) { return bPad(b, len, pb, false); } public static byte[] bRPad(byte[] b, int len, byte pb) { return bPad(b, len, pb, true); } public static String decimalFmt(String fmt, double val) { DecimalFormat df = new DecimalFormat(fmt); return df.format(val); } public static String decimalFmt(String fmt, long val) { DecimalFormat df = new DecimalFormat(fmt); return df.format(val); } public static String localPad(String str, int len, char ch, boolean isRight, String encoding) { try { byte b[] = str.getBytes(encoding); return new String(bPad(b, len, (byte) ch, isRight), encoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return str; } public static Date parseDT(SimpleDateFormat sdf, String dtStr) { try { return sdf.parse(dtStr); } catch (Exception ex) { lg.error("Parse Time Error", ex); } return new Date(); } public static String subGBK(String str, int idx, int len) { try { return new String(str.getBytes("GBK"), idx, len, "GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return ""; // return str.substring(idx, idx+len).trim(); } public static String toStr62(long l, int fixlen) { long idx; StringBuffer sb = new StringBuffer(); while (l > 0) { idx = l % RADIX62; l = l / RADIX62; sb.insert(0, STR62.charAt((int) idx)); } if (fixlen != -1) return StringUtils.leftPad(sb.toString(), fixlen, '0'); return sb.toString(); } public static String repeat(String str, int count) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < count; ++i) sb.append(str); return sb.toString(); } public static long fromStr62(String str) { long l = 0, lb = 0; int i, len; len = str.length(); for (i = 0; i < len; ++i) { char ch = str.charAt(i); lb = STR62.indexOf(ch); l *= 62; l += lb; } return l; } public static boolean dgtEmpty(String str) { return str == null || str.equals("") || str.equals("0") || str.equals("0.0") || str.equals("0.00"); } public static String yuan2Fen(String str) { int idx = str.indexOf('.'); if (idx == -1) { return str + "00"; } else { str = str + "000"; String tmpstr = str.substring(0, idx) + str.substring(idx + 1, idx + 3); str = tmpstr; if (str.startsWith("00")) { str = str.substring(2); } else if (str.startsWith("0")) { str = str.substring(1); } return str; } } public static String pureDT(String dt) { if (dt == null) return ""; return ptn.matcher(dt).replaceAll(""); } public static String fen2Yuan(String str) { final String ZEROS = "000000000"; int len = str.length(); if (len <= 2) { str = ZEROS.substring(0, 3 - len) + str; len = 3; } return str.substring(0, len - 2) + "." + str.substring(len - 2, len); } public static boolean emptyZ(String str) { int i, len; if (str == null) return true; len = str.length(); if (len == 0) return true; for (i = 0; i < len; ++i) { if (str.charAt(i) != '0') return false; } return true; } public static boolean empty(String str) { return str == null || str.equals(""); } public static int parseHMS(String str) { return (Integer.parseInt(str.substring(0, 2)) * 60 + Integer.parseInt(str.substring(2, 4))) * 60 + Integer.parseInt(str.substring(4, 6)); } public static String microHMS(Date dt) { return YMDHMSL.format(dt) + "012"; } public static String fmtDate(String fmt, Date dt) { return new SimpleDateFormat(fmt).format(dt); } public static Date parseDate(String fmt, String dt) throws ParseException { return new SimpleDateFormat(fmt).parse(dt); } public static String bean2Str(Object bean) { return ReflectionToStringBuilder.toString(bean, ToStringStyle.MULTI_LINE_STYLE); } public static String fmtdayLimit(Date dtIn, int addDay) { Calendar cld = Calendar.getInstance(); cld.setTimeInMillis(dtIn.getTime()); cld.add(Calendar.DAY_OF_MONTH, addDay); if (cld.getTimeInMillis() > System.currentTimeMillis()) cld.setTimeInMillis(System.currentTimeMillis()); return Y4M2D2.format(cld.getTime()); } public static String fmtday(Date dtIn, int addDay, String fmt) { Calendar cld = Calendar.getInstance(); cld.setTimeInMillis(dtIn.getTime()); cld.add(Calendar.DAY_OF_MONTH, addDay); if (cld.getTimeInMillis() > System.currentTimeMillis()) cld.setTimeInMillis(System.currentTimeMillis()); return new SimpleDateFormat(fmt).format(cld.getTime()); } public static String fmtday(Date dtIn, int addDay) { return fmtday(dtIn, addDay, "yyyyMMdd"); } public static String today() { Date dt = new Date(System.currentTimeMillis()); return Y4M2D2.format(dt); } /** * 返回HHmmss 时间格式 * */ public static String time() { Date dt = new Date(System.currentTimeMillis()); return HHMMSS.format(dt); } public static String today(String fmt) { Date dt = new Date(System.currentTimeMillis() + DAY_MILL); return new SimpleDateFormat(fmt).format(dt); } public static void initLog() { PropertyConfigurator.configure(SpringUtil.cfgPath("log4jchnl.properties")); lg.info("log4j for chnl loaded"); } public static String date6To8(String dateStr) { String dateRet, tdStr, cent; tdStr = today(); cent = tdStr.substring(0, 2); dateRet = cent + dateStr; if (dateRet.compareTo(tdStr) > 0) dateRet = String.valueOf(Integer.valueOf(cent).intValue() - 1) + dateStr; return dateRet; } /** * 生成20位交易流水号 * */ public synchronized static String mkTrsSn() { DecimalFormat df = new DecimalFormat("000"); String trssn = ""; Date dt = new Date(System.currentTimeMillis()); trssn = Y2M2D2HMSL.format(dt); count++; if (count > 999) { count = 0; } trssn += df.format(count); if (trssn.length() > 20) { trssn = trssn.substring(0, 20); } return trssn; } /** * 获取昨日日期 * */ public static String yesterday() { String day = ""; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); day = sdf.format(cal.getTime()); return day; } /** * 获取date日期的前一日 date的类型yyyyMMdd格式 * * @param date * 日期,格式为yyyyMMdd * @return 前一日的日期 * */ public static String beforeDay(String date) throws Exception { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); cal.setTime(sdf.parse(date)); cal.add(Calendar.DAY_OF_MONTH, -1); return sdf.format(cal.getTime()); } /** * 将文件父目录补齐 例如:原/usr/local 更新为/usr/local/ * */ public static String fullPrePath(String fpath) { String fp = fpath; if (!(fpath.endsWith("\\") || fpath.endsWith("/"))) { fp += "/"; } return fp; } /** * 判断是否全为数字 * * @param source * 要判断的字符串 * @return * **/ public static boolean isNum(String source) { return Pattern.matches("[0-9]*", source); } public static boolean empty(List ls) { if (ls == null || ls.size() == 0) return true; return false; } public static Calendar newCld(long mills) { Calendar cld = Calendar.getInstance(); cld.setTimeInMillis(mills); return cld; } public static Calendar newCld(Date dt) { Calendar cld = Calendar.getInstance(); cld.setTime(dt); return cld; } }