最近做了一个项目,需要与第三方接口联调,传过去的参数有一定的规则。
规则如下:
1、假设有参数zzz=4&zzz=2&&ZZZ=3,参数”zzz”,”zzz”,” ZZZ”进行排序,ZZZ<zzz,于是拼出的字符串为:” ZZZ3zzz42”
2、如果参数需要传多个同名参数时,例如key=value1,key=value2拼串只需key-value1value2这样,拼出的串里面,key只出现一次。
3、key-values对按key的字母升序排列,同一key对应多value的情况,value按出现顺序排列,不再按字母排序。
public String test(String ...strings){
List<String> stringList = new ArrayList<String>(); //接受原有的字符串
List<String> stringList1 = new ArrayList<String>(); //重新排列的字符串
for(String str : strings){
stringList.add(str);
}
while(true){
int i = 0;
int index = i;
for(int j=0;j<stringList.size();j++){
if(stringList.get(index).substring(0, stringList.get(i).indexOf("=")).compareTo(stringList.get(j).substring(0, stringList.get(j).indexOf("=")))>0){
index = j;
}
}
stringList1.add(stringList.get(index));
stringList.remove(index);
if(stringList.size() == 0){
break;
}
}
String sign = "";
List<String> key = new ArrayList<String>();
List<String> value = new ArrayList<String>();
for(String str : stringList1){
key.add(str.substring(0, str.indexOf("=")));
value.add(str.substring(str.indexOf("=")+1));
};
for(int i=0;i<stringList1.size();i++){
if(i == 0){
sign = sign.concat(key.get(0));
}
else if(!key.get(i).equals(key.get(i-1))){
sign = sign.concat(key.get(i));
}
sign = sign.concat(value.get(i));
}
return sign;
}