123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777 |
- 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<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() {
- @Override
- protected SimpleDateFormat initialValue() {
- return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- }
- };
- private final static ThreadLocal<SimpleDateFormat> dateFormater2 = new ThreadLocal<SimpleDateFormat>() {
- @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;
- }
- /**
- * 获取当前日期是星期几<br>
- *
- * @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 + "<br>");
- 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();
- }
- }
|