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