一直使用下面的方式解析url里的参数和值。
最近发现如果url中含有base64的参数值(可能包含=)就可能导致参数值只取到一部分。
所以急需修改完善程序。
-------------------------------------------------------------------------------------
old fetch param ::
for (String param_i : allparamstr_array) {
param_array = param_i.split("[=]");
if (param_array.length > 1)
ParamMap.put(param_array[0], param_array[1]);
}
-------------------------------------------------------------------------------------
之前考虑对余下的数组元素遍历拼接,后来发现这个方式不好(总会需要自己添加=并去掉最后一个=)。
此处就想到了 join方法,于是想到将数组的第一个元素shift掉或者 remove掉,然后用=来join余下的数组元素。比如:
param_array.shift();
ParamMap.put(param_array[0], StringUtils.join(param_array,"="));
但是java里面没有找到这样删除数组元素的办法。下面的由于包以来不方便用,
int[] intArray = {1,2,3,4,5};
int[] removed = ArrayUtils.removeElement(intArray,3);//create a new array
System.out.println(Arrays.toString(removed));
最后想到StringUtils所在的包里有ArrayUtils但是没有上面的方法,但是可以用StringUtils的substringAfter()方法。
于是写出来代码立马简单多了!
-------------------------------------------------------------------------------------
new fetch param :
import org.apache.commons.lang.*;
for (String param_i : allparamstr_array) {
param_array = param_i.split("[=]");
if (param_array.length == 2)
ParamMap.put(param_array[0], param_array[1]);
if (param_array.length > 2)
ParamMap.put(param_array[0], StringUtils.substringAfter(param_i,"="));
}