方法一:
/**
* ASCII码字典序
* @param map
* @return
*/
public static String ASCII(Map<String, String> map) {
StringBuilder result = new StringBuilder();
try {
List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(map.entrySet());
// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {
public int compare(Map.Entry<String, String> map1, Map.Entry<String, String> map2) {
return (map1.getKey()).toString().compareTo(map2.getKey());
}
});
// 构造签名键值对的格式
for (Map.Entry<String, String> item : infoIds) {
String key = item.getKey();
String val = item.getValue();
if (key == null||key.equals("")||key.equals("sign")||val == null||val.equals(""))
continue;// 跳过这些不签名
if (!result.toString().equals(""))
result.append('&'); // 第一个字符串签名不加& 其他加&连接起来参数
result.append(key + "=" + val);
}
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
方法二:
/**
* ASCII码字典序
*
* @param map
* @return
*/
public static String ASCII(Map<String, String> params) {
List<String> keys = new ArrayList<String>(params.keySet()); //转为数组
Collections.sort(keys); //重新排序
StringBuilder prestr = new StringBuilder();
for (int i = 0; i < keys.size(); i++) { //遍历拼接url 拼接成a=1&b=2
String key = keys.get(i);
String value = params.get(key);
if(key== null||key.equals("")||key.equals("sign")||value== null||value.equals("")){
continue; //跳过这些 不签名
}
if (!prestr.toString().equals("")) {
prestr.append('&'); // 第一个字符串签名不加& 其他加&连接起来参数
}
prestr.append(key + "=" + value);
}
return prestr.toString();
}