分享

字符串操作工具 StringTools

 CevenCheng 2011-04-19
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);
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多