高效率分离字符串到一个Map中

package test.hewen;

import java.io.UnsupportedEncodingException;
import java.util.Map;

public class StringUtil {
	/***
	 * 把一个字符串分离开,并按照key/value形式保存到Map中
	 * @param map 字符串中的字符存放在map中
	 * @param data 要分离的字符串
	 * @param encoding 字符编码
	 * @throws UnsupportedEncodingException
	 */
	public static void parseParameters(Map map, String data, String encoding)
			throws UnsupportedEncodingException {

		if ((data != null) && (data.length() > 0)) {//将字符串转换为字节数组
			byte[] bytes ;
			bytes=data.getBytes();
			parseParameters(map, bytes, encoding);
		}

	}

	/****
	 * 将字节数组中的字符分离到map中,该方法支持字符分离的标记:'%',
	 * '?','&'
	 * 
	 * @param map 存放分离的字符
	 * @param data  分离的字节数组
	 * @param encoding 按什么编码方法
	 * @throws UnsupportedEncodingException
	 */
	public static void parseParameters(Map map, byte[] data, String encoding)
			throws UnsupportedEncodingException {

		if (data != null && data.length > 0) {
			int ix = 0;
			int ox = 0;
			String key = null;
			String value = null;
			while (ix < data.length) {//对分离的字符数组循环
				byte c = data[ix++];
				switch ((char) c) {
				case '%':
				case '?':
				case '&'://当字节数组中的元素,遇到'%','?','&'字符,就创建value字符串
					value = new String(data, 0, ox, encoding);
					if (key != null) {
						putMapEntry(map, key, value);
						key = null;
					}
					ox = 0;
					break;
				case '='://当字节数组中的元素,遇到'='字符,那么创建key字符串
					key = new String(data, 0, ox, encoding);
					ox = 0;
					break;
				case '+'://当字节数组中的元素,遇到'+',那么就是以' '代替
					data[ox++] = (byte) ' ';
					break;
				default:
					data[ox++] = c;
				}
			}
			//最后一个截取的字符串,要进行处理
			if (key != null) {
				value = new String(data, 0, ox, encoding);
				putMapEntry(map, key, value);
			}
		}
	}
	
	/****
	 * 把分离的小字符串存放在map中
	 * 
	 * @param map
	 * @param name
	 * @param value
	 */
	private static void putMapEntry(Map map, String name, String value) {
		map.put(name, value);
	}

}

 

测试类:

 

package test.hewen;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

/****
 * 这个是把一个字符串分离开,并按照key/value形式保存到Map中,
 * 分离的格式是以%,?,&其他就不支持了
 * 
 * @author Administrator
 *
 */

public class Test {

	public static void main(String[] args) throws UnsupportedEncodingException {
		String encoding = "ISO-8859-1";
		String queryString="userName=tar+zan%password=pw+d";
		Map.Entry entry;
		 Map results= new HashMap();
		StringUtil.parseParameters(results, queryString, encoding);
		Iterator it=results.entrySet().iterator();
		while(it.hasNext()){
			 entry=(Entry) it.next();
			 System.out.println("key="+entry.getKey()+" value="+entry.getValue());
		}
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值