package cn.ksource.core.util; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.UUID; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.imageio.ImageIO; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import com.thoughtworks.xstream.core.util.Base64Encoder; public class StringUtil { public static String test(){ return StringUtil.getUUID(); } /** * 验证是否为Email格式 * @param email * @return * @version V1.0.0 * @author 杨凯 * @date Sep 7, 2013 12:06:34 PM */ public static boolean isEmail(String email){ Pattern pattern = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");//复杂匹配 Matcher matcher = pattern.matcher(email); if (matcher.matches()){ return true; } return false; } /** * * @param param * @return */ public static String asc2gbk(String param){ String ret = ""; if (StringUtils.isNotBlank(param)) { try { ret = new String(param.getBytes("ISO-8859-1"),"GBK").trim(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); ret =""; } } return ret; } public static String asc2utf8(String param){ String ret = ""; if (StringUtils.isNotBlank(param)) { try { ret = new String(param.getBytes("ISO-8859-1"),"UTF-8").trim(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); ret =""; } } return ret; } /** * 功能描述:阿拉伯数字转汉字
* * @param a * @return * @author:杨凯
* 时间:Apr 25, 2009 7:10:23 PM
*/ public static String translateNumToChinese(int a) { String[] units = { "", "十", "百", "千", "万", "十", "百", "千", "亿" }; String[] nums = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" }; String result = ""; if (a < 0) { result = "负"; a = Math.abs(a); } String t = String.valueOf(a); for (int i = t.length() - 1; i >= 0; i--) { int r = (int) (a / Math.pow(10, i)); if (r % 10 != 0) { String s = String.valueOf(r); String l = s.substring(s.length() - 1, s.length()); result += nums[Integer.parseInt(l) - 1]; result += (units[i]); } else { if (!result.endsWith("零")) { result += "零"; } } } return result; } /** * 功能描述:取得32位UUID
* * @return * @author:杨凯
* 时间:Feb 20, 2009 11:04:36 PM
*/ public static String getUUID() { return UUID.randomUUID().toString().replaceAll("-", ""); } /** * 功能描述:电话号码用××代替
* * @param photo * @return * @author:杨凯
* 时间:Apr 25, 2009 6:54:11 PM
*/ public static String dhhmreplaceByXX(String photo) { if (org.apache.commons.lang.StringUtils.isBlank(photo)) { return null; } char[] strs = photo.toCharArray(); for (int i = 3; i < 8; i++) { strs[i] = '*'; } return new String(strs); } /** * 去掉字符串中的回车换行符 * * @param str * @return */ public static String removeNewline(String str) { String result = null; if (str != null) { result = str.replaceAll("\\r\\n", ""); result = result.replaceAll(new String(new char[] { 10 }), ""); } return result; } /** * 功能描述:判断字符串是否为汉字
* @param str * @return * @author:杨凯
* 时间:Jul 8, 2009 9:02:48 AM
*/ public static boolean isNumber(String str) { if (str.matches("\\d*")) { return true; } else { return false; } } /** * 功能描述:浮点型判断 * * @param str * @return * @author 胡晓
* 时间:2009-7-29
*/ public static boolean isFloat(String str) { if (str == null || "".equals(str)) return false; Pattern pattern = Pattern.compile("[0-9]*(\\.?)[0-9]*"); return pattern.matcher(str).matches(); } /** * 功能描述:整型判断 * * @param str * @return * @author 胡晓
* 时间:2009-7-29
*/ public static boolean isInteger(String str) { if (StringUtil.isBlank(str)) return false; return str.matches("^-?\\d+"); } /** * 功能描述:获取子字符串的个数 * * @return * @author 胡晓
* 时间:2009-7-16
*/ public static int getSubCount(String sub, String string) { if (StringUtils.isBlank(string)) { return 0; } int subLength = sub.length(); int forLength = string.length() - sub.length() + 1; // 循环次数 int count = 0; // 记录循环次数 for (int i = 0; i < forLength; i++) { if (StringUtils.substring(string, i, i + subLength).equals(sub)) { count++; } } return count; } /** * 功能描述:接受一个List,如果有任何一个为空,则返回true,否则返回false * @param list * @return * @author 胡晓
* 时间:2009-8-8
*/ public static boolean isBlank(String... list){ for (String string : list) { if(StringUtils.isBlank(string)){ return true; } } return false; } /** * 如果IsNull,就返回defalut * @param str * @param defalut * @return * @version V1.0.0 * @author 杨凯 * @date Sep 19, 2013 8:59:22 AM */ public static String defaultIfNull(String str,String defalut){ if (StringUtils.isBlank(str)) { return defalut; } return str; } /** * 功能描述:都不为空,则返回true * @param list * @return * @author 胡晓
* 时间:2009-9-25 上午09:04:47
*/ public static boolean isNotBlank(String... list){ return !isBlank(list); } /** * 功能描述:trim从前台获取的参数,包括null变成"",'变成''
* @param s * @return * @author 胡晓
* 时间:2009-10-28 下午03:00:52
*/ public static String trimParam(Object s){ String str = ConvertUtil.obj2Str(s); if(StringUtils.isBlank(str)){ return ""; }else{ return str.replaceAll("'", "''").trim(); } } /** * 描述:tapestry 比较一个字符串包含另一个字符串 * @param o1 * @param o2 * @return * 作者:李坤 * 时间:Sep 9, 2010 */ public static boolean Str1ContainsStr2(Object o1 , Object o2){ if(ConvertUtil.obj2Str(o1).contains(ConvertUtil.obj2Str(o2))){ return true; } return false; } /** * 功能描述:截取指定长度字符串,一个汉字占两个字节,字符和数字占用一个
* @param value * @param length * @param flag 为真则后加"..." * @return * @author:杨凯
* 时间:Sep 12, 2009 3:53:36 PM
*/ public static String subStr(String value,int length,boolean flag){ if (StringUtils.isBlank(value) || value.getBytes().length <= length) return value; for (int i = 0; i <= value.length(); i++) { if (value.substring(0, i).getBytes().length > length) { if (i - 1 >= 0) { return value.substring(0, i - 1)+(flag ? "...":""); } } } return value; } /** * 清除一个时间格式字符串中的"-" ":"和空格,返回一个格式化的String
* 例如:将一个 2010-11-13 12:00 转换为 201011131200
* * 作者:郝世博
* 时间:2010-12-08 18:02 * * @param date * @return */ public static String clearDateStrToLong(String date) throws NumberFormatException{ String ret = ""; if(date!=null) { ret = date.replaceAll("[-]*[\\s]*[:]*", ""); } return ret; } /** * 描述:小数格式化 * @param value (需要格式化的数字) * @param length (保留几位小数) * @return * 作者:李坤 * 时间:Nov 5, 2010 */ public static Double getDoubleFormat(Double value,Integer length){ String str="."; for (int i = 0; i < length; i++) { str+="#"; } return Double.valueOf(new DecimalFormat(str).format(value)); } public static String decode(String str){ String string = ""; if(StringUtil.isNotBlank(str)){ try { string = URLDecoder.decode(str, "gbk"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return string; } public static String decode_utf(String str){ String string = ""; if(StringUtil.isNotBlank(str)){ try { string = URLDecoder.decode(str, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return string; } public static String decode_Iso_utf(String str) throws UnsupportedEncodingException{ if(StringUtil.isBlank(str)){ return str; } return new String(str.getBytes("ISO-8859-1"),"GBK"); } /** * 将2010-1-1 转为 20100101. * @author 郝世博 * @time Apr 8, 2011 6:48:15 PM */ public static String datestr2long(String date){ String[] time = date.split("-"); StringBuffer dateBuf = new StringBuffer(); for (int i = 0; i < time.length; i++) { if (i==0) { dateBuf.append(time[i]); }else { dateBuf.append(time[i].length()<2?"0"+time[i]:time[i]); } } return dateBuf.toString(); } /** * 将一个字符串根据给定的长度分隔成N个字符串的数组. * @author 郝世博 * @time Mar 30, 2011 11:06:59 PM */ public static String[] splitForLength(String str , int length){ int len = str.length(); int pageSize = (int) Math.ceil(len/70D); String[] array = new String[pageSize]; for (int i = 0; i < pageSize; i++) { int begin = i*70; int end = ( begin+70) >= len ? len : (begin+70 ); array[i] = str.substring( begin, end); } return array; } /** * 根据一个字符数组组成一个由指定字符分隔的字符串. * @author 郝世博 * @time Mar 31, 2011 1:42:17 PM */ public static String strArrayToStr(String[] arr,String sign){ StringBuffer buf = new StringBuffer(); for (int i = 0; i < arr.length; i++) { buf.append(arr[i]); if ( i郝世博 * @time Apr 8, 2011 1:46:00 PM */ public static String str2Html(String str){ String retStr = ""; if(str!=null){ retStr = str; retStr = retStr.replace("&", "&"); retStr = retStr.replace(" ", " "); retStr = retStr.replace("<", "<"); retStr = retStr.replace(">", ">"); retStr = retStr.replaceAll(" ", " "); retStr = retStr.replaceAll("\r\n", "
"); retStr = retStr.replaceAll("\r", "
"); } return retStr; } /** * . * @author 郝世博 * @time Jun 23, 2011 6:40:22 PM */ public static String num2Weekstr(int num){ String result = ""; switch (num) { case 1: result = "一"; break; case 2: result = "二"; break; case 3: result = "三"; break; case 4: result = "四"; break; case 5: result = "五"; break; case 6: result = "六"; break; case 7: result = "日"; break; default: break; } return result; } /** * 将字符串或路径中的 \ 转为 /. * @author 郝世博 * @time Jul 8, 2011 3:11:54 PM */ public static String convert(String text){ StringBuffer buf = new StringBuffer(""); if ( null==text ) { return null; } char[] chars = text.toCharArray(); for ( char tmp : chars ) { if (tmp=='\\') { tmp = '/'; } buf.append(tmp); } return buf.toString(); } /** * 编码 * 描述: * @param str * @return * 作者:李坤 * 时间:Aug 23, 2011 */ public static String base64Encode(String str){ if(StringUtil.isBlank(str)) return str; return new Base64Encoder().encode(str.getBytes()); } /** * 解码 * 描述: * @param str * @return * @throws IOException * 作者:李坤 * 时间:Aug 23, 2011 */ public static String base64Decode(String str) throws IOException{ if(StringUtil.isBlank(str)) return str; return new String(new BASE64Decoder().decodeBuffer(str)); } /** * 获取随机数 */ public static String getRandom(int length) { String yzm = StringUtils.right(Math.random()+"", length); while (yzm.length()!=length) { yzm = StringUtils.right(Math.random()+"", length); } return yzm; } public static String trim(String str) { if(StringUtil.isBlank(str)){ return str; } return str.trim(); } public static String[] split(String str, String regex) { return str.split(regex); } public static String replace(String str, String regex,String replacement) { return str.replaceAll(regex, replacement); } /** * 判断一个自己数组组成的字符串是否包含字符串 * @param strs 父字符串 * @param reg 用来拆分父字符串成为数组 * @param str 子字符串 * @return */ public static Boolean arrayContainsStr(String strs,String reg,String str) { if(isBlank(strs)){ return false; } String array [] = strs.split(reg); for (String string : array) { if(string.equals(str)){ return true; } } return false; } /** * 获取当前工程路径 * @return */ public static String getProjectPath() { return StringUtil.class.getResource("/").getPath().substring(1).split("WEB-INF")[0]; } public static String getStringValue(String inStr,int pos){ String retStr=""; if(inStr!=null&!"".equals(inStr)){ String[] tempS=inStr.split(","); retStr= tempS[pos]; } return retStr; } public static boolean isEmpty(String str){ if(null==str||str.trim().equals("")||"null".equals(str)){ return true; } return false; } /** * 分割字符串中间加字符 */ public static String getStringSplitByStr(String inStr,String str,int j){ if(inStr!=null&!"".equals(inStr)&str!=null&!"".equals(str)){ StringBuilder sb=new StringBuilder(inStr); int length=sb.length(); for(int i=1;i<=length/j;i++) { if(i==length/j && (length%j)==0); else sb.insert(i*j+i-1,str); } inStr = sb.toString(); } return inStr; } /** * 判断是否为空 */ public static boolean notEmpty(String str) { boolean b = false; if(null != str && !"".equals(str.trim())) { b = true; } return b; } public static boolean notEmptyNum(String str) { boolean b = false; if(null != str && !"".equals(str.trim()) && StringUtils.isNumeric(str)) { b = true; } return b; } /** * 判断是否是正确的手机号码 * @param mobile * @return */ public static boolean isValidMobileNum(String mobile){ if(StringUtil.notEmptyNum(mobile)) { mobile = mobile.trim(); } Pattern pattern = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9]))\\d{8}$"); Matcher matcher = pattern.matcher(mobile); return matcher.matches(); } /** * 判断是否是正确的电话号码(固定电话) * @param mobile * @return */ public static boolean isValidPhone(String phone){ if(StringUtil.notEmptyNum(phone)) { phone = phone.trim(); } Pattern pattern = Pattern.compile("^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$"); Matcher matcher = pattern.matcher(phone); return matcher.matches(); } /** * 判断是否为正确的邮政编码 */ public static boolean isPostCode(String postCode) { if(StringUtil.notEmptyNum(postCode)) { postCode = postCode.trim(); } Pattern pattern = Pattern.compile("^\\d{6}$"); Matcher matcher = pattern.matcher(postCode); return matcher.matches(); } /** * BASE64解密 * @param key * @return * @throws Exception */ public static String decryptBASE64(String key) { try { return new String((new BASE64Decoder()).decodeBuffer(key)); } catch (IOException e) { e.printStackTrace(); } return null; } /** * BASE64加密 * @param key * @return * @throws Exception */ public static String encryptBASE64(String key) { String v = new BASE64Encoder().encodeBuffer(key.getBytes()); return v.replaceAll("\n", "").replaceAll("\r", ""); } /** * 判断长度 */ public static boolean isRightLength(String key,int minLength,int maxLength) { int length = key.trim().length(); if(length>=minLength && length<=maxLength) { return true; } return false; } /** * 判断是否是密码(由6-18位的字母,数字,下划线组成) * @param args password */ public static boolean isPasswordReg(String password) { String passwordReg = "^\\w{6,18}$"; Pattern pattern = Pattern.compile(passwordReg); return pattern.matcher(password).matches(); } /** * 生成任意长度数字 * @param len 长度 * @return number */ public static String randomNumber(int len){ int length = len<=0?6:len;// 随机密码长度为 StringBuffer buffer = new StringBuffer("0123456789"); StringBuffer sb = new StringBuffer(); Random r = new Random(); int range = buffer.length(); //在此控制,随机数字的第一位不能是0,因为有的随机码是需要传给前台JS的,JS获取到首位为0的数字会自动将0去掉,这样就和后台对应不上,所以在此直接将首位为0的情况排除 for (boolean firstZero=true;sb.length() readCookieMap(HttpServletRequest request){ Map cookieMap = new HashMap(); Cookie[] cookies = request.getCookies(); if(null!=cookies){ for(Cookie cookie : cookies){ cookieMap.put(cookie.getName(), cookie); } } return cookieMap; } /** * 转化日期格式的形式 如:yyyy年MM月 转化为 yyyyMM * @param oldFormat 老的日期格式 * @param newFormat 新的日期格式 * @param dateStr 日期数据 * @return */ public static String formatDate(String oldFormat,String newFormat,String dateStr) { SimpleDateFormat format = new SimpleDateFormat(oldFormat); try { Date d = format.parse(dateStr); SimpleDateFormat nFormat = new SimpleDateFormat(newFormat); String result = nFormat.format(d); return result; } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 获取图片长和宽 * @param url 图片链接 * @return */ public static int[] getImgSize(String url) { int[] result = new int[2]; File picture = new File(url); BufferedImage sourceImg; try { sourceImg = ImageIO.read(new FileInputStream(picture)); int width = sourceImg.getWidth(); int height = sourceImg.getHeight(); System.out.println(width); System.out.println(height); result[0] = width; result[1] = height; return result; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 比较两个日期的大小 * @param beginTime 开始时间 * @param endTime 结束时间 * @param formatStr 日期格式 * @return */ public static boolean compareDate(String beginTime,String endTime,String formatStr) { boolean b = false; if(StringUtil.notEmpty(beginTime) && StringUtil.notEmpty(endTime)) { SimpleDateFormat format = new SimpleDateFormat(formatStr);//设置日期格式 try { Date beginDate = format.parse(beginTime); Date endDate = format.parse(endTime); if(endDate.after(beginDate)) { b = true; } } catch (ParseException e) { e.printStackTrace(); } } return b; } /** * 通过文件后缀获取文件对应的图片 */ public static String docSuffer(String suffer) { suffer = suffer.toLowerCase(); if(suffer.equals("doc") || suffer.equals("docx")) { return "doc"; } else if(suffer.equals("xls") || suffer.equals("xlsx")) { return "excel"; } else if(suffer.equals("jpg") || suffer.equals("gif") || suffer.equals("jpeg") || suffer.equals("png")|| suffer.equals("bmp")) { return "img"; } else if(suffer.equals("pdf")) { return "pdf"; } else if(suffer.equals("ppt") || suffer.equals("pptx")) { return "ppt"; } else if(suffer.equals("rar") || suffer.equals("zip")) { return "rar"; } else if(suffer.equals("txt")) { return "txt"; } else { return "cloud"; } } /** * 得到文件转化后的大小 * @param fs 文件大小 (单位B) */ public static String getFileSize(double fs) { String fileSize = new String(); if(fs<1024) { fileSize = fs+" B"; } else if(fs>=1024 && fs<1024*1024) { double fsize = NumberUtil.div(fs, Double.valueOf("1024"), 0); fileSize = ConvertUtil.obj2Int(fsize)+" KB"; } else { double size = 1024*1024; double fsize = NumberUtil.div(fs, size, 0); fileSize = ConvertUtil.obj2Int(fsize)+" MB"; } return fileSize; } /** * 微信端文件后缀对应的图片名称 */ public static String wechateDocSuffer(String suffer) { suffer = suffer.toLowerCase(); if(suffer.equals("doc") || suffer.equals("docx")) { return "doc"; } else if(suffer.equals("xls") || suffer.equals("xlsx")) { return "xls"; } else if(suffer.equals("jpg") || suffer.equals("gif") || suffer.equals("jpeg") || suffer.equals("png")|| suffer.equals("bmp")) { return "img"; } else if(suffer.equals("pdf")) { return "pdf"; } else if(suffer.equals("ppt") || suffer.equals("pptx")) { return "ppt"; } else if(suffer.equals("rar") || suffer.equals("zip")) { return "rar"; } else if(suffer.equals("txt")) { return "txt"; } else { return "default"; } } /** * 详情页对应的图片名称 */ public static String detailDocSuffer(String suffer) { suffer = suffer.toLowerCase(); if(suffer.equals("doc") || suffer.equals("docx")) { return "DOC2"; } else if(suffer.equals("xls") || suffer.equals("xlsx")) { return "XLS2"; } else if(suffer.equals("jpg") || suffer.equals("gif") || suffer.equals("jpeg") || suffer.equals("png")|| suffer.equals("bmp")) { return "JPG2"; } else if(suffer.equals("pdf")) { return "PDF2"; } else if(suffer.equals("ppt") || suffer.equals("pptx")) { return "PPT2"; } else if(suffer.equals("rar") || suffer.equals("zip")) { return "Archive2"; } else if(suffer.equals("txt")) { return "TXT2"; } else { return "common1_1"; } } /** * 通过年,月获得该月的第一天和最后一天 * @param year 格式 yyyy * @param month 格式 MM * @return 数组第一个当前月第一天, 数组第二个:当前月最后一天 */ public static String[] queryFirstLastDate(String year,String month) { String[] str = new String[2]; if(!StringUtil.notEmptyNum(year)||year.length()!=4||Integer.valueOf(year)<0) { year = DateUtil.format(new Date(), "yyyy"); } if(!StringUtil.notEmptyNum(month)||Integer.valueOf(month)<1||Integer.valueOf(month)>12) { month = DateUtil.format(new Date(), "MM"); } if(month.length()!=2) { month = "0"+month; } String firstDate = year+"-"+month+"-01"; str[0] = firstDate; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = dateFormat.parse(firstDate); String lastDate = dateFormat.format(lastDayOfMonth(date)); str[1] = lastDate; } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; } /* * 获得指定日期所在月最后一天 */ public static Date lastDayOfMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.DAY_OF_MONTH, 1); cal.roll(Calendar.DAY_OF_MONTH, -1); return cal.getTime(); } }