工具类汇总1

最近写项目过程中,使用到了很多工具类,现在整理整理,共享一些,后续持续更新吧。

1.MD5加密算法:

package com.neuqsoft.utils;

import java.security.MessageDigest;

public class MD5Util {

	private static String byteArrayToHexString(byte b[]) {
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++)
			resultSb.append(byteToHexString(b[i]));

		return resultSb.toString();
	}

	private static String byteToHexString(byte b) {
		int n = b;
		if (n < 0)
			n += 256;
		int d1 = n / 16;
		int d2 = n % 16;
		return hexDigits[d1] + hexDigits[d2];
	}

	/**
	 * 
	 * @param origin
	 * @param charsetname
	 * @return 16进制输出的字符串,全部小写
	 */
	public static String MD5Encode(String origin, String charsetname) {
		String resultString = null;
		try {
			resultString = new String(origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			if (charsetname == null || "".equals(charsetname))
				resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
			else
				resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
		} catch (Exception exception) {
		}
		return resultString;
	}

	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

}

2.xml解析:

package com.neuqsoft.utils;

import java.util.HashMap;
import java.util.Iterator;


import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class XmlUtil {

	private static final Logger log = Logger.getLogger(XmlUtil.class);
	
	/**
	 * xml解码,解析,返回MAP <neuqpay><responsedata></responsedata></neuqpay>
	 * 
	 * @param xml
	 * @return
	 * @throws DocumentException
	 */
	public static HashMap<String, String> readReturnXml(String xml) throws DocumentException {
		return readStringXml(xml, "requestdata");
	}
	
	/**
	 * xml解码,解析,返回MAP
	 * labelPath格式:labelName[.labelName][.labelName],例如:responsedata.
	 * returnNumber/responsedata.rowdata/responsedata.rowdata.phone/
	 * 
	 * @param xml
	 * @return
	 * @throws DocumentException
	 */
	
	public static HashMap<String, String> readStringXml(String xml, String labelPath) throws DocumentException {

		log.debug(xml);
		HashMap<String, String> parameterMap = new HashMap<String, String>();
		Document doc = null;
		doc = DocumentHelper.parseText(xml);
		Element requestEle = doc.getRootElement();
		// 迭代取得目标节点,以下用法为foreach语句,为遍历数组提供
				for (String ename : labelPath.split("\\.")) {
					requestEle = requestEle.element(ename);
				}
		// 如果没有下级节点,将本节点返回
		if (requestEle.isTextOnly()) {
			parameterMap.put(requestEle.getName(), requestEle.getTextTrim());
		} else {
			Iterator<Element> itr = requestEle.elementIterator();
			while (itr.hasNext()) {
				Element ele = (Element) itr.next();
				log.debug(ele.getName());
				parameterMap.put(ele.getName(), ele.getTextTrim());
			}
		}
		return parameterMap;
	}

	/**
	 * 组装 返回xml(包含子节点)
	 * 
	 * @param returnMap(添加到节点的内容)
	 * @param infoMap(添加到子节点的内容)
	 * @return
	 */
	
	public static Document createXml(HashMap<String, String> returnMap,HashMap<String, String> infoMap) {
		Document doc = DocumentHelper.createDocument();
		doc.setXMLEncoding("UTF-8");
		//添加节点
		Element responsedata = doc.addElement("neuqpay").addElement("responsedata");
		Iterator<String> keyit = returnMap.keySet().iterator();
		while (keyit.hasNext()) {
			String keyName = keyit.next();
			responsedata.addElement(keyName.toUpperCase())
					.setText(returnMap.get(keyName) == null ? "" : returnMap.get(keyName));
		}
		//添加有子节点的节点
		Element tradeinfo = responsedata.addElement("tradeinfo");
		Iterator<String> zkeyit = infoMap.keySet().iterator();
		while (zkeyit.hasNext()) {
			String zkeyName = zkeyit.next();
			tradeinfo.addElement(zkeyName.toUpperCase())
					.setText(infoMap.get(zkeyName) == null ? "" : infoMap.get(zkeyName));
		}
		log.debug(doc.asXML());
		return doc;
	}
	
	/**
	 * 组装返回xml
	 * 
	 * @param returnMap
	 * @return
	 */
	public static Document createXml(HashMap<String, String> returnMap) {
		Document doc = DocumentHelper.createDocument();
		doc.setXMLEncoding("UTF-8");
		//添加节点
		Element responsedata = doc.addElement("neuqpay").addElement("responsedata");
		Iterator<String> keyit = returnMap.keySet().iterator();
		while (keyit.hasNext()) {
			String keyName = keyit.next();
			responsedata.addElement(keyName.toUpperCase())
					.setText(returnMap.get(keyName) == null ? "" : returnMap.get(keyName));
		}
		log.debug(doc.asXML());
		return doc;
	}
	
}

3.全角转半角:(自己已测试,除了句号转不过来,常用的逗号和一些全角数字都没问题)

package com.neuqsoft.pay.common.utils;

public class BCConvertUtil {

	
    
    
    /**  
     * ASCII表中可见字符从!开始,偏移位值为33(Decimal)  
     */    
    static final char DBC_CHAR_START = 33; // 半角!    
    
    /**  
     * ASCII表中可见字符到~结束,偏移位值为126(Decimal)  
     */    
    static final char DBC_CHAR_END = 126; // 半角~    
    
    /**  
     * 全角对应于ASCII表的可见字符从!开始,偏移值为65281  
     */    
    static final char SBC_CHAR_START = 65281; // 全角!    
    
    /**  
     * 全角对应于ASCII表的可见字符到~结束,偏移值为65374  
     */    
    static final char SBC_CHAR_END = 65374; // 全角~    
    
    /**  
     * ASCII表中除空格外的可见字符与对应的全角字符的相对偏移  
     */    
    static final int CONVERT_STEP = 65248; // 全角半角转换间隔    
    
    /**  
     * 全角空格的值,它没有遵从与ASCII的相对偏移,必须单独处理  
     */    
    static final char SBC_SPACE = 12288; // 全角空格 12288    
    
    /**  
     * 半角空格的值,在ASCII中为32(Decimal)  
     */    
    static final char DBC_SPACE = ' '; // 半角空格    
    
    /**  
     * <PRE>  
     * 半角字符->全角字符转换    
     * 只处理空格,!到˜之间的字符,忽略其他  
     * </PRE>  
     */    
    public static String bj2qj(String src) {    
        if (src == null) {    
            return src;    
        }    
        StringBuilder buf = new StringBuilder(src.length());    
        char[] ca = src.toCharArray();    
        for (int i = 0; i < ca.length; i++) {    
            if (ca[i] == DBC_SPACE) { // 如果是半角空格,直接用全角空格替代    
                buf.append(SBC_SPACE);    
            } else if ((ca[i] >= DBC_CHAR_START) && (ca[i] <= DBC_CHAR_END)) { // 字符是!到~之间的可见字符    
                buf.append((char) (ca[i] + CONVERT_STEP));    
            } else { // 不对空格以及ascii表中其他可见字符之外的字符做任何处理    
                buf.append(ca[i]);    
            }    
        }    
        return buf.toString();    
    }    
    
    /**  
     * <PRE>  
     * 全角字符->半角字符转换    
     * 只处理全角的空格,全角!到全角~之间的字符,忽略其他  
     * </PRE>  
     */    
    public static String qj2bj(String src) {    
        if (src == null) {    
            return src;    
        }    
        StringBuilder buf = new StringBuilder(src.length());    
        char[] ca = src.toCharArray();    
        for (int i = 0; i < src.length(); i++) {    
            if (ca[i] >= SBC_CHAR_START && ca[i] <= SBC_CHAR_END) { // 如果位于全角!到全角~区间内    
                buf.append((char) (ca[i] - CONVERT_STEP));    
            } else if (ca[i] == SBC_SPACE) { // 如果是全角空格    
                buf.append(DBC_SPACE);    
            } else { // 不处理全角空格,全角!到全角~区间外的字符    
                buf.append(ca[i]);    
            }    
        }    
        return buf.toString();    
    }    
}

今天就写这几个,看会程序。明天还有一天,加油!

转载于:https://my.oschina.net/u/3610749/blog/1506132

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值