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()); } } }