package com.nuliji.tools; import org.apache.commons.codec.binary.Base64; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by gaojie on 2017/11/9. */ public class Tools { private static final Logger logger = LoggerFactory.getLogger(Tools.class); protected static Random random = new Random(); public static String stringMD5(String str) { return byteArrayToHexString(getMd5(str)); } public static String stringSha1(String str) { return byteArrayToHexString(getSha1(str)); } public static int getRandom() { return random.nextInt(999999)%900000+100000; } public static String getRandomString(int length){ String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random=new Random(); StringBuffer sb=new StringBuffer(); for(int i=0;i Collection union(Collection arr1, Collection arr2) { Set set = new HashSet(); set.addAll(arr1); set.addAll(arr2); return set; } //求两个数组的交集 public static Collection intersect(Collection arr1, Collection arr2) { Map map = new HashMap(); LinkedList list = new LinkedList(); for (T str : arr1) { if (!map.containsKey(str)) { map.put(str, Boolean.FALSE); } } for (T str : arr2) { if (map.containsKey(str)) { map.put(str, Boolean.TRUE); } } for (Map.Entry e : map.entrySet()) { if (e.getValue().equals(Boolean.TRUE)) { list.add(e.getKey()); } } return list; } //求两个数组的差集: 第一个不在第二个中的元素 public static Collection minus(Collection arr1, Collection arr2) { LinkedList list = new LinkedList(); list.addAll(arr1); for (T str : arr2) { if (list.contains(str)) { list.remove(str); } } return list; } public static String joinIds(Collection ids) { List list = new ArrayList<>(); // logger.debug("join:{}", ids); if(ids == null || ids.size() == 0) return ""; for (Object id : ids) { list.add(id.toString()); } return String.join(",", list); } public static Collection splitIds(String ids){ List l = new ArrayList<>(); // logger.debug("split:{}", ids); if(ids == null || ids.length() == 0) return l; String[] list = ids.split(","); for(String s:list){ l.add(Long.valueOf(s)); } return l; } public static String getClientIp(HttpServletRequest request){ String ipAddress = request.getHeader("x-forwarded-for"); if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 if(ipAddress.indexOf(",")>0){ ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); } } return ipAddress; } public static Date today(){ Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } public static Date day(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } public static int yearNumber(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.YEAR); } public static int monthNumber(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH); } public static Date month(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } public static int hour(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.HOUR_OF_DAY); } public static Date addHour(Date date, int hour){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.HOUR, hour); return c.getTime(); } public static Date addDate(Date date, int day){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DAY_OF_YEAR, day); return c.getTime(); } public static Date addMonth(Date date, int month){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MONTH, month); return c.getTime(); } public static Date addYear(Date date, int year){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.YEAR, year); return c.getTime(); } public static TreeMap parseXml(String xml) { Document document = null; TreeMap packageMap = new TreeMap<>(); try { document = DocumentHelper.parseText(xml); } catch (DocumentException ex) { return null; } Element rootElement = document.getRootElement(); for (Element element : (List) rootElement.elements()) { packageMap.put(element.getName(), element.getText()); } return packageMap; } /** * 转换为下划线 * * @param camelCaseName * @return */ public static String underscoreName(String camelCaseName) { StringBuilder result = new StringBuilder(); if (camelCaseName != null && camelCaseName.length() > 0) { result.append(camelCaseName.substring(0, 1).toLowerCase()); for (int i = 1; i < camelCaseName.length(); i++) { char ch = camelCaseName.charAt(i); if (Character.isUpperCase(ch)) { result.append("_"); result.append(Character.toLowerCase(ch)); } else { result.append(ch); } } } return result.toString(); } /** * 转换为驼峰 * * @param underscoreName * @return */ public static String camelCaseName(String underscoreName) { StringBuilder result = new StringBuilder(); if (underscoreName != null && underscoreName.length() > 0) { boolean flag = false; for (int i = 0; i < underscoreName.length(); i++) { char ch = underscoreName.charAt(i); if ("_".charAt(0) == ch) { flag = true; } else { if (flag) { result.append(Character.toUpperCase(ch)); flag = false; } else { result.append(ch); } } } } return result.toString(); } }