锁定老帖子 主题:高效率分离字符串到一个Map中
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-08
最后修改:2010-12-10
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()); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-09
int len = data.length();
byte[] bytes = new byte[len]; bytes=data.getBytes(); 这样的垃圾代码也叫高效吗? |
|
返回顶楼 | |
发表时间:2010-12-09
请你赐教一下怎样能达到高效,我这个高效自己自认的。。。如果有高效的代码,请你指点。。。
|
|
返回顶楼 | |
发表时间:2010-12-09
最后修改:2010-12-09
他只是觉得你的int len = data.length();
byte[] bytes = new byte[len]; 是多余的而已... 你new 出来又不用.说明你copy也没到位. 其他的代码反正也是copy tomcat的源码 就不评价了. |
|
返回顶楼 | |
发表时间:2010-12-09
楼上是如何去查看特定的tomcat源码的呀?我也想学学,我是new come~~希望楼上的赐教哈~
|
|
返回顶楼 | |
发表时间:2010-12-09
精华部分太多了,里面有很多设计思想和优秀的源码,要不断的调式跟踪源代码,推荐看看How Tomcat Works,最近我也在翻译这本书。。。
|
|
返回顶楼 | |
发表时间:2010-12-10
为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?
|
|
返回顶楼 | |
发表时间:2010-12-10
悠游键客 写道 为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?
楼主显然没看过《重构》,建议楼主去看下,这是一个不好的习惯 |
|
返回顶楼 | |
发表时间:2010-12-10
悠游键客 写道 为啥要传一个Map参数进去,而不是直接就返回一个Map对象呢?
这个问题,难道也要问吗? Map做为参数传递的好处应该很明显的…… |
|
返回顶楼 | |
发表时间:2010-12-10
mp_juan 写道 这样的代码也能上首页,佩服了,jeye越来越不负责任
上首页访问的问题,没有审核,我想! 这个名字比较拉风而已,所以。。。 |
|
返回顶楼 | |