package com.yxz.framework.utils;
import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.lang.reflect.Method;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.commons.io.IOUtils;
public class StringUtil {
private static final String MOBILE_REG = "^(13[0-9]|14[0-9]|15[0-9]|18[0-9]|17[0-9])\\d{8}$"; private static final String EMAIL_REG = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; /** * 生成随机字符串 * @param random * @param len * @return */ public static String getRandomString( int random, int len ){ java.util.Random rd = new java.util.Random(); StringBuffer sb = new StringBuffer(); int rdGet; // 取得随机数 char ch; for ( int i = 0 ; i < len; i ++ ){ rdGet = Math.abs(rd.nextInt()) % 10 + 48 ; // 产生48到57的随机数(0-9的键位值) //rdGet=Math.abs(rd.nextInt())%26+97; // 产生97到122的随机数(a-z的键位值) ch = ( char ) rdGet; sb.append( ch ); } return sb.toString(); } /** * 截取字符串截取的字符用...显示 * * @return */ public static String subStringStr(String str,int size) { if(isEmptyString(str)) return ""; if(str.length()<size) return str; String lastString = str.substring(0,size)+"..."; return lastString; } /** * 截取字符串 * * @return */ public static String subStringStrNoSuffix(String str,int size) { if(isEmptyString(str)) return ""; if(str.length()<size) return str; String lastString = str.substring(0,size); return lastString; } /** * 判断传入的字符串是否为空串 * * @return */ public static boolean isEmptyString(String str) { return str == null ? true : str.trim().equals("") ? true : false; } /** * Float转换成String * @param n 小数点后保留几位 * @param f 要转化的数 * @return */ public static String getPercent(int n,Float f){ java.text.NumberFormat nf = java.text.NumberFormat.getPercentInstance(); nf.setMinimumFractionDigits(n); String str = nf.format(f); return str; } /** * 判断传入的字符串是否为空串,如果是null的就替换为""空字符串. * * @return */ public static String replaceNullStr(String str) { if(str==null){ return ""; } if(!isEmptyString(str)){ if("null".equals(str)){ str=str.replace("null", ""); return str; }else{ return str; } }else{ return str; } } /** * 验证是否是有效的手机号 * * @param mobile 手机号 * @return */ public final static boolean validMobileNumber(final String mobile) { if (isEmptyString(mobile)) { return false; }Pattern pattern = Pattern.compile(MOBILE_REG);
if (!pattern.matcher(mobile).matches()) {
return false; } return true; } /** * 校验是否是有效的邮件地址 * * @param email 邮箱地址 * @return 有效则返回真,否则返回假 */ public static boolean validEmail(final String email) { if (isEmptyString(email)) { return false; } Pattern pattern = Pattern.compile(EMAIL_REG); if (!pattern.matcher(email).matches()) { return false; } return true; } /** * 校验有效的名称 * @param nickName 昵称 * @return 返回真 */ public static boolean validUserName(final String userName) { boolean isAllDigit =userName.matches("[0-9]+"); if(isAllDigit) { //用户名不能为纯数字 return false; } return true; } /** * 去除字符串首尾出现的某个字符. * @param source 源字符串. * @param element 需要去除的字符. * @return String. */ public static String trimFirstAndLastChar(String source,char element){ boolean beginIndexFlag = true; boolean endIndexFlag = true; do{ int beginIndex = source.indexOf(element) == 0 ? 1 : 0; int endIndex = source.lastIndexOf(element) + 1 == source.length() ? source.lastIndexOf(element) : source.length(); source = source.substring(beginIndex, endIndex); beginIndexFlag = (source.indexOf(element) == 0); endIndexFlag = (source.lastIndexOf(element) + 1 == source.length()); } while (beginIndexFlag || endIndexFlag); return source; } /** * 转换成UTF-8编码 * @param str * @return */ public static String toUTF8(String str){ if(!isEmptyString(str)){ try{ return new String(str.getBytes("iso8859-1"),"UTF-8"); }catch(Exception ex){ return ""; } } return ""; } /** * 屏蔽手机的方法 * @param source 手机号 * @return */ public static String hiddenMobile(String source) { if (isEmptyString(source)) { return ""; } Pattern pattern = Pattern.compile("^1\\d{10}$");if (pattern.matcher(source).matches()) {
return source.substring(0,3) + "****" + source.substring(7, 11); } else { return source; } } /** * 屏蔽邮箱的方法 * @param source 邮箱 * @return */ public static String hiddenEmail(String source) { if (isEmptyString(source)) { return ""; } Pattern pattern = Pattern.compile(EMAIL_REG); if (pattern.matcher(source).matches()) { int splitIndex = source.indexOf("@"); String emailPrefix = source.substring(0, splitIndex); if(emailPrefix.length() > 4) { source = source.substring(0, emailPrefix.length()-4) + "****" + source.substring(splitIndex); } else { source = source.substring(0, 1) + "****" + source.substring(splitIndex); } return source; } else { return source; } } /** * 屏蔽身份证号的方法 * @param source 身份证号 * @return */ public static String hiddenIDCard(String source) { if (isEmptyString(source)) { return ""; } if(source.length() > 8) { source = source.substring(0, source.length()-8) + "********"; } else { source = source.substring(0, 1) + "********"; } return source; } /** * 反射输出实体类所有公共无入参的get和is方法名称和值--日志中使用 * @param object 实体类对象 * @return object属性名称名称及属性值 */ public static String printParam(Object object){ if(object==null){ return ""; } StringBuffer out=new StringBuffer(); try { Class<?> clazz=object.getClass(); out.append(clazz.getSimpleName()); out.append(" ["); Method[] methods=clazz.getMethods(); for (Method method : methods) { if(method.getName().indexOf("get")>=0){ Type [] types=method.getGenericParameterTypes(); if(types==null || types.length==0){ Method mtd = clazz.getMethod(method.getName(),new Class[]{}); Object value = mtd.invoke(object); if(value!=null){ out.append(method.getName()+"="+value.toString()+","); } } } } out.append("]"); } catch (Exception e) { } return out.toString(); } /** * 用变量值替换字符串模板中的变量 * @param template 模板 * @param varStart 变量开始字符串 * @param varEnd 变量结束字符串 * @param values 变量值 * @return */ public static String buildStringByTemplate(String template, String varStart, String varEnd, Map<String,String> values){ String s = template; for(String key : values.keySet()){ s = s.replace(varStart + key + varEnd, values.get(key) == null?"":values.get(key)); } return s; } /** * 把字节数组保存为一个文件 */ public static File getFileFromBytes(byte[] b, String outputFile) throws Exception{ BufferedOutputStream stream = null; FileOutputStream fstream = null; File file = null; try{ file = new File(outputFile); fstream = new FileOutputStream(file); stream = new BufferedOutputStream(fstream); stream.write(b); } catch (Exception e){ throw e; } finally{ IOUtils.closeQuietly(stream); IOUtils.closeQuietly(fstream); } return file; } /** * 隐藏姓名 * @param userName * @return */ public static String hidenUserName(String userName) { if(isEmptyString(userName)){ return userName; } return userName.substring(0, 1)+"**"; } /** * 处理 "null" * @param value * @return */ public static String coverNullStrValue(String value){ if ("null".equals(value)||value==null) { return ""; } return value; } /** * 变换数组为字符串 * @param arr * @return */ public static String arrToStr(String[] arr) { String str = null; if (arr != null) { str = org.springframework.util.StringUtils.quote(org.springframework.util.StringUtils.arrayToDelimitedString(arr, "','")); } return str; } public static boolean isPinyin(String keyword){ Pattern p = Pattern.compile("([a-z|A-Z]*)"); Matcher m = p.matcher(keyword); return m.matches(); } /** * 判断是否是数字(>=0 不包括负数) * @param str * @return */ public static boolean isNumber(String str){ if(isEmptyString(str)){ return false; } return str.matches("^\\d+"); } /** * 判断两个字符串的内容是否相同 * @param s1 * @param s2 */ public static boolean isSame(String s1,String s2){ if(s1!=null){ return s1.equals(s2); }else if(s2!=null){ return s2.equals(s1); }else{ return true; } }/** * 设置地区地区编码 * * @return */ public static Map<String, String> GetAreaCode() { Map<String, String> areas = new HashMap<String, String>(); areas.put("11", "北京"); areas.put("12", "天津"); areas.put("13", "河北"); areas.put("14", "山西"); areas.put("15", "内蒙古"); areas.put("21", "辽宁"); areas.put("22", "吉林"); areas.put("23", "黑龙江"); areas.put("31", "上海"); areas.put("32", "江苏"); areas.put("33", "浙江"); areas.put("34", "安徽"); areas.put("35", "福建"); areas.put("36", "江西"); areas.put("37", "山东"); areas.put("41", "河南"); areas.put("42", "湖北"); areas.put("43", "湖南"); areas.put("44", "广东"); areas.put("45", "广西"); areas.put("46", "海南"); areas.put("50", "重庆"); areas.put("51", "四川"); areas.put("52", "贵州"); areas.put("53", "云南"); areas.put("54", "西藏"); areas.put("61", "陕西"); areas.put("62", "甘肃"); areas.put("63", "青海"); areas.put("64", "宁夏"); areas.put("65", "新疆"); areas.put("71", "台湾"); areas.put("81", "香港"); areas.put("82", "澳门"); areas.put("91", "国外"); return areas; }
/**
* 判断字符串是否为数字 * * @param str * @return */ @SuppressWarnings("unused") private static boolean isNumeric(String str) { if(isEmptyString(str)){ return false; } Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str); if (isNum.matches()) { return true; } else { return false; } }/**
* 功能:判断字符串是否为日期格式 * * @param str * @return */ public static boolean isDate(String strDate) { if(isEmptyString(strDate)){ return false; } Pattern pattern = Pattern .compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"); Matcher m = pattern.matcher(strDate); if (m.matches()) { return true; } else { return false; } } public static String getContent(Map<String,String> params) { List<String> keys = new ArrayList<String>(params.keySet()); Collections.sort(keys);//对参数排序,已确保拼接的签名顺序正确 String prestr = ""; boolean first = true; for (int i = 0; i < keys.size(); i++) { String key = (String) keys.get(i); String value = (String) params.get(key); if (value == null || value.trim().length() == 0) { continue; } if (first) { prestr = prestr + key + "=" + value; first = false; } else { prestr = prestr + "&" + key + "=" + value; } } return prestr ; } public static String cutString2(int len,String source){ if(source.length()>=len){ return source.substring(0, len)+"… "; }else{ return source; } } public static String cutString(int len,String source){ if(source.length()>=len){ return source.substring(0, len)+"… "; }else{ return source; } }}