Code:
import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.StringTokenizer; public class url { public static void main(String[] args)throws Exception { String str="http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=CT&cmd=C._A&sty=FCOIATA&sortType=C&sortRule=-1&page=1&pageSize=70&js=var%20quote_123%3d{rank:[(x)],pages:(pc)}&token=7bc05d0d4c3c22ef9fca8c2a912d779c&jsName=quote_123&_g=0.5927966693718834"; String result=GetRealUrl(str); System.out.println(result); } //对url中的参数进行url编码 public static String GetRealUrl(String str) { try { int index = str.indexOf("?"); if (index < 0) return str; String query = str.substring(0, index); String params = str.substring(index + 1); Map map = GetArgs(params); //Map map=TransStringToMap(params); String encodeParams = TransMapToString(map); return query + "?" + encodeParams; } catch (Exception ex) { System.out.println(ex.getMessage()); } return ""; } //将url参数格式转化为map public static Map GetArgs(String params) throws Exception{ Map map=new HashMap(); String[] pairs=params.split("&"); for(int i=0;i<pairs.length;i++){ int pos=pairs[i].indexOf("="); if(pos==-1) continue; String argname=pairs[i].substring(0,pos); String value=pairs[i].substring(pos+1); value= URLEncoder.encode(value,"utf-8"); map.put(argname,value); } return map; } //将map转化为指定的String类型 public static String TransMapToString(Map map){ java.util.Map.Entry entry; StringBuffer sb = new StringBuffer(); for(Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) { entry = (java.util.Map.Entry)iterator.next(); sb.append(entry.getKey().toString()).append( "=" ).append(null==entry.getValue()?"": entry.getValue().toString()).append (iterator.hasNext() ? "&" : ""); } return sb.toString(); } //将String类型按一定规则转换为Map public static Map TransStringToMap(String mapString){ Map map = new HashMap(); java.util.StringTokenizer items; for(StringTokenizer entrys = new StringTokenizer(mapString, "&"); entrys.hasMoreTokens(); map.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null)) items = new StringTokenizer(entrys.nextToken(), "="); return map; } }
Output:
http://nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?sortType=C&sortRule=-1&_g=0.5927966693718834&sty=FCOIATA&pageSize=70&js=var%2520quote_123%253d%7Brank%3A%5B%28x%29%5D%2Cpages%3A%28pc%29%7D&cmd=C._A&page=1&type=CT&token=7bc05d0d4c3c22ef9fca8c2a912d779c&jsName=quote_123
上面code里面有两个方法,分别是String转换成map,一个是map转换成String,收集记录!