J2EE工具类:StringUtil.java

package com.worthtech.app.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class StringUtil {

	private static MessageDigest digest = null;

	/**
	 * 对字符串进行MD5加密
	 * @param data
	 * @return
	 */
	public String hash(String data) {
		if (digest == null)
			try {
				digest = MessageDigest.getInstance("MD5");
			} catch (NoSuchAlgorithmException nsae) {
				System.err.println("Failed to load the MD5 MessageDigest. We will be unable to function normally.");
				nsae.printStackTrace();
			}
		digest.update(data.getBytes());
		return encodeHex(digest.digest());
	}
	private String encodeHex(byte bytes[]) {
		StringBuffer buf = new StringBuffer(bytes.length * 2);
		for (int i = 0; i < bytes.length; i++) {
			if ((bytes[i] & 0xff) < 16)
				buf.append("0");
			buf.append(Long.toString(bytes[i] & 0xff, 16));
		}
		return buf.toString().toUpperCase();
	}
	/**
	 * 在list中查询以prefix开头的子项,返回符合匹配的list
	 * @param list
	 * @param prefix
	 * @return
	 */
	public List getMatches(List list,String prefix) {   
        String prefix_upper = prefix.toUpperCase();   
        List matches = new ArrayList();   
        Iterator iter = list.iterator();   
        while (iter.hasNext()) {   
            String name = (String) iter.next();   
            String name_upper = name.toUpperCase();   
            if (name_upper.startsWith(prefix_upper)) {
                matches.add(name);   
            }   
        }   
        return matches;   
    }

	/**
	 * 统计字符出现次数
	 * @param s
	 */
	public Map<Character, Integer> getStatistics(String s) {  
	        Map<Character, Integer> map = new HashMap<Character, Integer>();  
	        int i, size = s.length();  
	        for (i = 0; i < size; i++) {  
	            char c = s.charAt(i);  
	            map.put(c, map.containsKey(c) ? ((Integer) map.get(c) + 1) : 1);  
	         }  
                return map;
	}

         /**
	 * 将一字符串数组用指定的分隔符接起来
	 * @param array
	 * @param split
	 * @return
	 */
	public String addSplit(String[] array, String split) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < array.length - 1; i++)
			sb.append(array[i] + split);
		sb.append(array[array.length - 1]);
		return sb.toString();
	}
	public static void main(String[] args){
//		StringUtil util=new StringUtil();
	}

/**
     * Encode string to hex string, hex string can use in url
     * @param str
     * @return hex string
     */
    public static String HexEncode(String str) {
    	String hexString = null;
    	if (str != null && str.length() > 0) {
    		char[] digital = "0123456789ABCDEF".toCharArray();
    		StringBuffer sb = new StringBuffer("");
    		try {
    			byte[] bs = str.getBytes("utf-8");
    			int bit;
    			for (int i = 0; i < bs.length; i++) {
    				bit = (bs[i] & 0x0f0) >> 4;
    				sb.append(digital[bit]);
    				bit = bs[i] & 0x0f;
    				sb.append(digital[bit]);
    			}
    		} catch(Exception e) {
    		}
    		hexString = sb.toString();
    	}
    	
    	return hexString;
    }

    /**
     * Decode hex string
     * @param hexString
     * @return
     */
    public static String HexDecode(String hexString) {
    	String str = null;
    	if (hexString != null && hexString.length() > 0) {
    		String digital = "0123456789ABCDEF";
    		char[] hex2char = hexString.toCharArray();
    		byte[] bytes = new byte[hexString.length() / 2];
    		int temp;
    		for (int i = 0; i < bytes.length; i++) {
    			temp = digital.indexOf(hex2char[2 * i]) * 16;
    			temp += digital.indexOf(hex2char[2 * i + 1]);
    			bytes[i] = (byte)(temp & 0xff);
    		}
    		try {
    			str = new String(bytes, "utf-8");
    		} catch (Exception e) {
    		}
    	}
    	return str;
    }
    
    /**
     * judge a string is null or empty
     * @param str
     * @return return true if str is null or empty, otherwise false 
     */
    public static boolean isEmpty(String str) {
    	return (str == null || str.length() == 0); 
    }
/**
*将多余的文字用...代替(length为双字节,比如length=18,表示9个汉字)
*/
public static String getLimitLengthString(String str, int length) {
		String view = null;
		int counterOfDoubleByte = 0;
		byte b[];
		if (str == null) {
			return "";
		} else {
			try {
				b = str.getBytes("GBK");
				if (b.length <= length)
					return str;
				for (int i = 0; i < length; i++) {
					if (b[i] > 0)
						counterOfDoubleByte++;
				}
				if (counterOfDoubleByte % 2 == 0)
					view = new String(b, 0, length, "GBK") + "...";
				else
					view = new String(b, 0, length - 1, "GBK") + "...";
			} catch (Exception e) {
				e.printStackTrace();
			}
			return view;
		}
	}
//身份证效验规则
//http://since2006.com/blog/chinese-id-verify/
    public boolean isIdCard(String arrIdCard) {
        int sigma = 0;
        Integer[] a = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        String[] w = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
        for (int i = 0; i < 17; i++) {
            int ai = Integer.parseInt(arrIdCard.substring(i, i + 1));
            int wi = a[i];
            sigma += ai * wi;
        }
        int number = sigma % 11;
        String check_number = w[number];
        //return check_number;
        //System.out.println(check_number);
        if (!arrIdCard.substring(17).equals(check_number)) {
            return false;
        } else {
            return true;
        }
    }

}

你可能感兴趣的:(java,C++,c,Security,C#)