package com.aicaipiao.client.common; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.DeflaterOutputStream; import java.util.zip.Inflater; public class StringTools { /** * 产生随机字符串 */ private static Random randGen = null; private static char[] numbersAndLetters = null; private static Object initLock = new Object(); private static Random randGenNumber = null; private static char[] numbersAndLettersNumber = null; private static Object initLockNumber = new Object(); public static final String parserArrayToString(String[] array,String splter){ StringBuffer strBuff=new StringBuffer(); for(String str:array){ strBuff.append(str); strBuff.append(splter); } strBuff.delete(strBuff.toString().length()-splter.length(),strBuff.toString().length()); return strBuff.toString(); } public static final String randomString(int length) { if (length < 1) { return null; } if (randGen == null) { synchronized (initLock) { if (randGen == null) { randGen = new Random(); numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray(); } } } char[] randBuffer = new char[length]; for (int i = 0; i < randBuffer.length; i++) { randBuffer[i] = numbersAndLetters[randGen.nextInt(62)]; } return new String(randBuffer); } public static final String randomNumberString(int length) { if (length < 1) { return null; } if (randGenNumber == null) { synchronized (initLockNumber) { if (randGenNumber == null) { randGenNumber = new Random(); numbersAndLettersNumber = ("0123456789") .toCharArray(); } } } char[] randBuffer = new char[length]; for (int i = 0; i < randBuffer.length; i++) { randBuffer[i] = numbersAndLettersNumber[randGenNumber.nextInt(10)]; } return new String(randBuffer); } final static public String getStringFillZero(String str,int length){ if(str.length( ) == length){ return str; } int fillLength = length - str.length(); for(int i = 0;i<fillLength; i++){ str = "0"+str; } return str; } final static public boolean isValueIdTokenString(String tokenString,String split,String value){ String [] str = tokenString.split(split); for(int i=0;i<str.length;i++){ if(str[i].equals(value)){ return true; } } return false; } /** * @描述:解析http头里的参数值 * @param header * @return */ final static public HashMap<String,String> getParametersByHttpHead(String header) { String data = header.substring(header.indexOf("?") + 1, header .indexOf(" HTTP")); return getParametersByContents(data); } /** * @描述:解析 key=value&key=value的键值 * @param contents * @return */ final static public HashMap<String,String> getParametersByContents(String contents) { HashMap<String, String> map = new HashMap<String, String>(); String[] keyValues = contents.split("&"); for (int i = 0; i < keyValues.length; i++) { String key = keyValues[i].substring(0, keyValues[i].indexOf("=")); String value = keyValues[i] .substring(keyValues[i].indexOf("=") + 1); map.put(key, value); } return map; } /** * @描述:解析 key=value&key=value的键值 * @param contents * @return */ final static public HashMap<String,String> getParametersByContents(String contents,String charset) { System.out.println(contents); HashMap<String, String> map = new HashMap<String, String>(); String[] keyValues = contents.split("&"); for (int i = 0; i < keyValues.length; i++) { String key = keyValues[i].substring(0, keyValues[i].indexOf("=")); String value = keyValues[i] .substring(keyValues[i].indexOf("=") + 1); if(charset != null && !"".equals(charset)){ try { value = java.net.URLDecoder.decode(value, charset); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } map.put(key, value); } return map; } /** * @描述:将map转成key=value&key=value * @param contents * @return */ final static public String getStringByHashMap(Map map) { StringBuffer sb = new StringBuffer(); Iterator it = map.keySet().iterator(); while(it.hasNext()){ Object key = it.next(); Object value = map.get(key); sb.append(key.toString()).append("=").append(value.toString()).append("&"); } if(sb.length()>0){ sb.deleteCharAt(sb.length()-1); } return sb.toString(); } /** * @描述:将ActionContext 里而的Parameter map转成key=value&key=value * @param contents * @return */ final static public String getStringByActionHashMap(Map map) { StringBuffer sb = new StringBuffer(); Iterator it = map.keySet().iterator(); while(it.hasNext()){ Object key = it.next(); Object value = map.get(key); if(value instanceof String[]){ String [] values = (String[])value; StringBuffer subSb = new StringBuffer(); if(values!=null){ for(int i=0;i<values.length;i++){ subSb.append(values[i]).append("|"); } if(subSb.length()>0){ subSb.deleteCharAt(subSb.length()-1); } } sb.append(key.toString()).append("=").append(subSb.toString()).append("&"); } } if(sb.length()>0){ sb.deleteCharAt(sb.length()-1); } return sb.toString(); } /** * @描述:将map转成key=value&key=value * @param contents * @return */ final static public String getStringByHashMap(HashMap<String,String> map,String chartset)throws Exception { StringBuffer sb = new StringBuffer(); Iterator it = map.keySet().iterator(); while(it.hasNext()){ String key = (String)it.next(); String value = map.get(key); sb.append(key).append("=").append(URLEncoder.encode(value, chartset)).append("&"); } if(sb.length()>0){ sb.deleteCharAt(sb.length()-1); } return sb.toString(); } /** * 把给定的字符串转换为Base64编码 * * @param source * 需要进行转换的字符串 * @return 转换后的结果,如果source为null,则返回null */ public static String EncodeBase64(String source) { if (source == null) return null; return new String(org.apache.commons.codec.binary.Base64 .encodeBase64(source.getBytes())); } /** * 把base64编码的字符串进行解码并返回原字符串 * * @param source * 需要进行解码的Base64编码的字符串 * @return 解码后的原字符串,如果错误则返回null */ public static String DecodeBase64(String source) { if (source == null) return null; try { return new String(Base64Util.decode(source)); } catch (Exception ex) { return null; } } public static String[] split(String str, char delim) { if(str == null) return null; if(str.trim().equals("")) return new String[0]; int count = 1; char c[] = str.toCharArray(); for(int i = 0; i < c.length; i++) { if(c[i] == delim) { count++; } } String s[] = new String[count]; int index = 0; StringBuffer sb = new StringBuffer(); for(int i = 0; i < c.length; i++) { if(c[i] == delim) { s[index] = sb.toString(); sb = new StringBuffer(); index ++; } else { sb.append(c[i]); } } s[index] = sb.toString(); return s; } static public String decodeForwardUrl(String forwardUrl){ forwardUrl = StringTools.DecodeBase64(forwardUrl); /** * 以下的代码是为了让转向地址携带的参数能正常传递 * 如号码格式里面的 % 这些字符必须经过URLEncode才能被正常解析 */ String pre = ""; String bak = forwardUrl.substring( forwardUrl.indexOf("?") + 1, forwardUrl.length()); String area[] = bak.split("\\&"); StringBuffer sb = new StringBuffer(); for (int i = 0; i < area.length; i++) { System.out.println("area" + area[i]); String[] peace = area[i].split("\\="); if (peace.length == 2) { try { sb.append(peace[0]).append("=").append( URLEncoder.encode(peace[1], "GBK")) .append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else if (peace.length == 1){ System.out.println("Warning the empty parameter is:"+peace[0]); //sb.append(peace[0]).append("=").append("").append("&"); } } if(sb.length()>0){ sb.deleteCharAt(sb.length()-1); pre = forwardUrl.substring(0, forwardUrl .indexOf("?") + 1); }else{ //后面没有参数,不用带 ? if(forwardUrl.indexOf('?') != -1){ pre = forwardUrl.substring(0, forwardUrl .indexOf("?")); } } forwardUrl = pre + sb.toString(); return forwardUrl; } public boolean isNumber(String str){ try{ Integer.valueOf(str); return true; }catch(Exception e){ return false; } } /** * zip压缩 * @param data String * @return byte[] */ public static byte[] compress( byte[] data ) { byte[] result = new byte[0]; try { ByteArrayOutputStream baos = new ByteArrayOutputStream() ; DeflaterOutputStream dos = new DeflaterOutputStream( baos ) ; dos.write(data) ; dos.finish() ; result = baos.toByteArray() ; dos.close() ; baos.close() ; } catch( Exception ex ) { ex.printStackTrace() ; } return result ; } public static byte[] decompress(byte[] data) { byte[] result = new byte[0]; ByteArrayOutputStream o = new ByteArrayOutputStream(); try { byte[] temp = new byte[8192]; Inflater inflater = new Inflater(); inflater.setInput(data); int got; while (!inflater.finished()) { got = inflater.inflate(temp); o.write(temp, 0, got); } // int size = inflater.inflate(temp); // System.out.println("size:" + size + ",max limit:" + temp.length ); inflater.end(); //result = new byte[size]; // System.arraycopy(temp,0,result,0,size); } catch (Exception ex) { ex.printStackTrace(); } return o.toByteArray(); } public static String getDomain(String str){ if(str.indexOf("http://") != 0){ return ""; } if(str.indexOf(".com") != -1 || str.indexOf(".net") != -1 || str.indexOf(".gov") != -1 || str.indexOf(".org") != -1 || str.indexOf(".cn") != -1){ return str.substring(str.indexOf(".")+1, str.indexOf(".",str.indexOf(".")+1)); }else{ return ""; } } /*将汉字转换为Unicode * Converts unicodes to encoded \uxxxx and escapes * special characters with a preceding slash */ public static String toUnicode(String theString,boolean escapeSpace, boolean escapeUnicode) { int len = theString.length(); int bufLen = len * 2; if (bufLen < 0) { bufLen = Integer.MAX_VALUE; } StringBuffer outBuffer = new StringBuffer(bufLen); for(int x=0; x<len; x++) { char aChar = theString.charAt(x); // Handle common case first, selecting largest block that // avoids the specials below if ((aChar > 61) && (aChar < 127)) { if (aChar == '\\') { outBuffer.append('\\'); outBuffer.append('\\'); continue; } outBuffer.append(aChar); continue; } switch(aChar) { case ' ': if (x == 0 || escapeSpace) outBuffer.append('\\'); outBuffer.append(' '); break; case '\t':outBuffer.append('\\'); outBuffer.append('t'); break; case '\n':outBuffer.append('\\'); outBuffer.append('n'); break; case '\r':outBuffer.append('\\'); outBuffer.append('r'); break; case '\f':outBuffer.append('\\'); outBuffer.append('f'); break; case '=': // Fall through case ':': // Fall through case '#': // Fall through case '!': outBuffer.append('\\'); outBuffer.append(aChar); break; default: if (((aChar < 0x0020) || (aChar > 0x007e)) & escapeUnicode ) { outBuffer.append('\\'); outBuffer.append('u'); outBuffer.append(toHex((aChar >> 12) & 0xF)); outBuffer.append(toHex((aChar >> 8) & 0xF)); outBuffer.append(toHex((aChar >> 4) & 0xF)); outBuffer.append(toHex( aChar & 0xF)); } else { outBuffer.append(aChar); } } } return outBuffer.toString(); } /** * Convert a nibble to a hex character * @param nibble the nibble to convert. */ private static char toHex(int nibble) { return hexDigit[(nibble & 0xF)]; } /** A table of hex digits */ private static final char[] hexDigit = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; static public void main(String[] args)throws Exception { //43532 //5000 String str = "http://sesd./sss/index.jsp"; str =str.substring(str.indexOf(".")+1, str.indexOf(".",str.indexOf(".")+1)); System.out.println(str); //System.out.println("dudu123456".indexOf("dudu")); //System.out.println("dudu123456".substring(4)); } /** * 替换字符串中存在手机号码的中间几位为**** * @param str * @return */ public static String replaceMobile(String str) { try { Pattern p = Pattern .compile("^(?:13\\d|15\\d|18[056789])-?\\d{5}(\\d{3}|\\*{3})$"); Matcher m = p.matcher(str); if (m.matches()) { return str.substring(0, 3) + "****" + str.substring(7, 11); } else { return str; } } catch (Exception e) { return str; } } /** * 取前length个字符,后面用... * @param str * @param length * @return */ public static String cutString(String str,int length) { if(str==null || str.equals("")) return str; int strLen = str.length(); if(strLen-1<length) { return str; } try { return str.substring(0, length)+"..."; } catch (Exception e) { return str; } } public static boolean compareString(String str1,String str2) { if(str1==null) str1="";; if(str2==null) str2="";; return !str1.equals(str2); } } |
|
来自: CevenCheng > 《常用功能组件》