package com.xunao.effectdemo.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import java.util.regex.Pattern; public class StringUtil { private final static String FSpliter = "##"; private final static String SSpliter = "||"; private final static Pattern PHONE = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); private final static Pattern emailer = Pattern .compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"); private final static Pattern IMG_URL = Pattern .compile(".*?(gif|jpeg|png|jpg|bmp)"); private final static Pattern URL = Pattern .compile("^(https|http)://.*?$(net|com|.com.cn|org|me|)"); private final static ThreadLocal dateFormater = new ThreadLocal() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; private final static ThreadLocal dateFormater2 = new ThreadLocal() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; /** * 将字符串转位日期类型 * * @param sdate * @return */ public static Date toDate(String sdate) { return toDate(sdate, dateFormater.get()); } public static Date toDate(String sdate, SimpleDateFormat dateFormater) { try { return dateFormater.parse(sdate); } catch (ParseException e) { return null; } } public static String getDateString(Date date) { return dateFormater.get().format(date); } /** * 以友好的方式显示时间 * * @param sdate * @return */ public static String friendly_time(String sdate) { Date time = null; if (TimeZoneUtil.isInEasternEightZones()) time = toDate(sdate); else time = TimeZoneUtil.transformTime(toDate(sdate), TimeZone.getTimeZone("GMT+08"), TimeZone.getDefault()); if (time == null) { return "Unknown"; } String ftime = ""; Calendar cal = Calendar.getInstance(); // 判断是否是同一天 String curDate = dateFormater2.get().format(cal.getTime()); String paramDate = dateFormater2.get().format(time); if (curDate.equals(paramDate)) { int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); if (hour == 0) ftime = Math.max( (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分钟前"; else ftime = hour + "小时前"; return ftime; } long lt = time.getTime() / 86400000; long ct = cal.getTimeInMillis() / 86400000; int days = (int) (ct - lt); if (days == 0) { int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); if (hour == 0) ftime = Math.max( (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分钟前"; else ftime = hour + "小时前"; } else if (days == 1) { ftime = "昨天"; } else if (days == 2) { ftime = "前天 "; } else if (days > 2 && days < 31) { ftime = days + "天前"; } else if (days >= 31 && days <= 2 * 31) { ftime = "一个月前"; } else if (days > 2 * 31 && days <= 3 * 31) { ftime = "2个月前"; } else if (days > 3 * 31 && days <= 4 * 31) { ftime = "3个月前"; } else { ftime = dateFormater2.get().format(time); } return ftime; } public static String friendly_time2(String sdate) { String res = ""; if (isEmpty(sdate)) return ""; String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; String currentData = StringUtil.getDataTime("MM-dd"); int currentDay = toInt(currentData.substring(3)); int currentMoth = toInt(currentData.substring(0, 2)); int sMoth = toInt(sdate.substring(5, 7)); int sDay = toInt(sdate.substring(8, 10)); int sYear = toInt(sdate.substring(0, 4)); Date dt = new Date(sYear, sMoth - 1, sDay - 1); if (sDay == currentDay && sMoth == currentMoth) { res = "今天 / " + weekDays[getWeekOfDate(new Date())]; } else if (sDay == currentDay + 1 && sMoth == currentMoth) { res = "昨天 / " + weekDays[(getWeekOfDate(new Date()) + 6) % 7]; } else { if (sMoth < 10) { res = "0"; } res += sMoth + "/"; if (sDay < 10) { res += "0"; } res += sDay + " / " + weekDays[getWeekOfDate(dt)]; } return res; } /** * 获取当前日期是星期几
* * @param dt * @return 当前日期是星期几 */ public static int getWeekOfDate(Date dt) { Calendar cal = Calendar.getInstance(); cal.setTime(dt); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return w; } /** * 判断给定字符串时间是否为今日 * * @param sdate * @return boolean */ public static boolean isToday(String sdate) { boolean b = false; Date time = toDate(sdate); Date today = new Date(); if (time != null) { String nowDate = dateFormater2.get().format(today); String timeDate = dateFormater2.get().format(time); if (nowDate.equals(timeDate)) { b = true; } } return b; } /** * 返回long类型的今天的日期 * * @return */ public static long getToday() { Calendar cal = Calendar.getInstance(); String curDate = dateFormater2.get().format(cal.getTime()); curDate = curDate.replace("-", ""); return Long.parseLong(curDate); } public static String getCurTimeStr() { Calendar cal = Calendar.getInstance(); String curDate = dateFormater.get().format(cal.getTime()); return curDate; } /*** * 计算两个时间差,返回的是的秒s * * @param dete1 * @param date2 * @return * @author 火蚁 2015-2-9 下午4:50:06 */ public static long calDateDifferent(String dete1, String date2) { long diff = 0; Date d1 = null; Date d2 = null; try { d1 = dateFormater.get().parse(dete1); d2 = dateFormater.get().parse(date2); // 毫秒ms diff = d2.getTime() - d1.getTime(); } catch (Exception e) { e.printStackTrace(); } return diff / 1000; } public static String getChineseForNum(int num) { String chineseNum = ""; switch (num) { case 0: chineseNum = "零"; break; case 1: chineseNum = "一"; break; case 2: chineseNum = "二"; break; case 3: chineseNum = "三"; break; case 4: chineseNum = "四"; break; case 5: chineseNum = "五"; break; case 6: chineseNum = "六"; break; case 7: chineseNum = "七"; break; case 8: chineseNum = "八"; break; case 9: chineseNum = "九"; break; case 10: chineseNum = "十"; break; } return chineseNum; } /** * 判断给定字符串是否空白串。 空白串是指由空格、制表符、回车符、换行符组成的字符串 若输入字符串为null或空字符串,返回true * * @param input * @return boolean */ public static boolean isEmpty(String input) { if (input == null || "".equals(input)) return true; for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); if (c != ' ' && c != '\t' && c != '\r' && c != '\n') { return false; } } return true; } public static boolean isPhone(String phone) { if (phone == null || phone.trim().length() == 0) { return false; } return PHONE.matcher(phone).matches(); } /** * 判断是不是一个合法的电子邮件地址 * * @param email * @return */ public static boolean isEmail(String email) { if (email == null || email.trim().length() == 0) return false; return emailer.matcher(email).matches(); } /** * 判断一个url是否为图片url * * @param url * @return */ public static boolean isImgUrl(String url) { if (url == null || url.trim().length() == 0) return false; return IMG_URL.matcher(url).matches(); } /** * 判断是否为一个合法的url地址 * * @param str * @return */ public static boolean isUrl(String str) { if (str == null || str.trim().length() == 0) return false; return URL.matcher(str).matches(); } /** * 字符串转整数 * * @param str * @param defValue * @return */ public static int toInt(String str, int defValue) { try { return Integer.parseInt(str); } catch (Exception e) { } return defValue; } /** * 对象转整数 * * @param obj * @return 转换异常返回 0 */ public static int toInt(Object obj) { if (obj == null) return 0; return toInt(obj.toString(), 0); } /** * 对象转整数 * * @param obj * @return 转换异常返回 0 */ public static long toLong(String obj) { try { return Long.parseLong(obj); } catch (Exception e) { } return 0; } /** * 字符串转布尔值 * * @param b * @return 转换异常返回 false */ public static boolean toBool(String b) { try { return Boolean.parseBoolean(b); } catch (Exception e) { } return false; } public static String getString(String s) { return s == null ? "" : s; } /** * 将一个InputStream流转换成字符串 * * @param is * @return */ public static String toConvertString(InputStream is) { StringBuffer res = new StringBuffer(); InputStreamReader isr = new InputStreamReader(is); BufferedReader read = new BufferedReader(isr); try { String line; line = read.readLine(); while (line != null) { res.append(line + "
"); line = read.readLine(); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != isr) { isr.close(); isr.close(); } if (null != read) { read.close(); read = null; } if (null != is) { is.close(); is = null; } } catch (IOException e) { } } return res.toString(); } /*** * 截取字符串 * * @param start 从那里开始,0算起 * @param num 截取多少个 * @param str 截取的字符串 * @return */ public static String getSubString(int start, int num, String str) { if (str == null) { return ""; } int leng = str.length(); if (start < 0) { start = 0; } if (start > leng) { start = leng; } if (num < 0) { num = 1; } int end = start + num; if (end > leng) { end = leng; } return str.substring(start, end); } /** * 获取当前时间为每年第几周 * * @return */ public static int getWeekOfYear() { return getWeekOfYear(new Date()); } /** * 获取当前时间为每年第几周 * * @param date * @return */ public static int getWeekOfYear(Date date) { Calendar c = Calendar.getInstance(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setTime(date); int week = c.get(Calendar.WEEK_OF_YEAR) - 1; week = week == 0 ? 52 : week; return week > 0 ? week : 1; } public static int[] getCurrentDate() { int[] dateBundle = new int[3]; String[] temp = getDataTime("yyyy-MM-dd").split("-"); for (int i = 0; i < 3; i++) { try { dateBundle[i] = Integer.parseInt(temp[i]); } catch (Exception e) { dateBundle[i] = 0; } } return dateBundle; } /** * 返回当前系统时间 */ public static String getDataTime(String format) { SimpleDateFormat df = new SimpleDateFormat(format); return df.format(new Date()); } /** * 将一个InputStream流转换成字符串,UTF-8 */ public static String inputStream2String(InputStream is, String code) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(is, code)); int i = -1; char[] b = new char[1000]; StringBuffer sb = new StringBuffer(); while ((i = in.read(b)) != -1) { sb.append(new String(b, 0, i)); } String content = sb.toString(); return content; } /** * 将一个替换一个字符串中的某几个字符 */ public static String replaceStringForPosition(String res, String str, int start, int end) { String head = res.substring(0, start - 1); String body = str; String tail = res.substring(end - 1); return head + body + tail; } public static String getWanMoney(double money) { double tempDouble = money / 10000; if (tempDouble < 1) { return String.valueOf((int) money); } else { NumberFormat nf = new DecimalFormat("#.#"); String strMoney = nf.format(tempDouble) + "万"; return strMoney; } } public static String getFormatMoney(double money) { NumberFormat nf = new DecimalFormat(",###"); String strMoney = nf.format(money); return strMoney; } public static String getFormatMoneyOnePoint(double money) { DecimalFormat nf = new DecimalFormat("#.#"); String strMoney = nf.format(new BigDecimal(money)); String[] strsTmp = strMoney.split("\\."); if (strsTmp.length < 2) { strMoney = strMoney + ".0"; } else { if (strsTmp[1].length() > 1) { strsTmp[1] = strsTmp[1].substring(0, 1); } strMoney = strsTmp[0] + "." + strsTmp[1]; } return strMoney; } public static String getFormatMoneyTwoPoint(double money) { DecimalFormat nf = new DecimalFormat("#.##"); String strMoney = nf.format(new BigDecimal(money)); String[] strsTmp = strMoney.split("\\."); if (strsTmp.length < 2) { strMoney = strMoney + ".00"; } else { if (strsTmp[1].length() == 1) { strsTmp[1] = strsTmp[1] + "0"; } if (strsTmp[1].length() > 2) { strsTmp[1] = strsTmp[1].substring(0, 2); } strMoney = strsTmp[0] + "." + strsTmp[1]; } return strMoney; } public static String getFormatMoneyTwoPointFen(long money) { String strMoney = String.valueOf(money); strMoney = strMoney.substring(0, strMoney.length() - 2) + "." + strMoney.substring(strMoney.length() - 2); return strMoney; } public static String[] splitStringsWithSpace(String source) { if (StringUtil.isEmpty(source)) { return null; } source = source + " ."; String tempSource = source.replace("[", "").replace("]", ""); String[] tempStrs = tempSource.split(" "); String[] strs = new String[tempStrs.length - 1]; for (int i = 0; i < strs.length; i++) { strs[i] = tempStrs[i]; } return strs; } public static int[] spliteIntWithSpace(String source) { if (StringUtil.isEmpty(source)) { return null; } String[] strings = splitStringsWithSpace(source); int[] ints = new int[strings.length]; for (int i = 0; i < strings.length; i++) { ints[i] = Integer.valueOf(strings[i]); } return ints; } /** * 定义size位整数,如果位数达不到,前面用0补齐 * 如果超出位数,用规定位数最大数补齐 * */ public static String formatSizedNum(int num, int size) { String strNum = String.valueOf(num); if (strNum.length() < size) { while(strNum.length() < size) { strNum = "0" + strNum; } } else if (strNum.length() > size) { strNum = ""; while(strNum.length() < size) { strNum += "9"; } } return strNum; } /** * 用##分割 */ public static String[] spliteStringWithFS(String source) { if (StringUtil.isEmpty(source)) { return null; } String[] strs = source.split(FSpliter); return strs; } /** * 用||分割 */ public static String[] spliteStringWithSS(String source) { if (StringUtil.isEmpty(source)) { return null; } String[] strs = source.split(SSpliter); return strs; } public static boolean isSame(String source, String target) { if (source == null && target != null) { return false; } else if (source != null && target == null) { return false; } else if (source == target) { return true; } else if (source.equals(target)) { return true; } else { return false; } } public static String encryptionPhone(String phone) { StringBuilder builder = new StringBuilder(phone); if (phone.length() >= 11) { for (int i = 3; i < phone.length() - 4; i++) { builder.setCharAt(i, '*'); } } else { for (int i = 2; i < phone.length() - 2; i++) { builder.setCharAt(i, '*'); } } return builder.toString(); } /** * 将字符串中的Unicode编码转换成UTF-8 * */ public static String decodeUnicode(String theString) { char aChar; int len = theString.length(); StringBuffer outBuffer = new StringBuffer(len); for (int x = 0; x < len;) { aChar = theString.charAt(x++); if (aChar == '\\') { aChar = theString.charAt(x++); if (aChar == 'u') { // Read the xxxx int value = 0; for (int i = 0; i < 4; i++) { aChar = theString.charAt(x++); switch (aChar) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': value = (value << 4) + aChar - '0'; break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': value = (value << 4) + 10 + aChar - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': value = (value << 4) + 10 + aChar - 'A'; break; default: throw new IllegalArgumentException( "Malformed \\uxxxx encoding."); } } outBuffer.append((char) value); } else { if (aChar == 't') aChar = '\t'; else if (aChar == 'r') aChar = '\r'; else if (aChar == 'n') aChar = '\n'; else if (aChar == 'f') aChar = '\f'; outBuffer.append(aChar); } } else outBuffer.append(aChar); } return outBuffer.toString(); } }