1.替换指定url里的参数值,这里有两种方式替换
java解析替换
public static String replaceAccessToken(String url, String name, String accessToken) {
if(StringUtils.isNotBlank(url) && StringUtils.isNotBlank(accessToken)) {
int index = url.indexOf(name + "=");
if(index != -1) {
StringBuilder sb = new StringBuilder();
sb.append(url.substring(0, index)).append(name + "=")
.append(accessToken);
int idx = url.indexOf("&", index);
if(idx != -1) {
sb.append(url.substring(idx));
}
url = sb.toString();
}
}
return url;
}
正则替换
public static String replaceAccessTokenReg(String url, String name, String accessToken) {
if(StringUtils.isNotBlank(url) && StringUtils.isNotBlank(accessToken)) {
url = url.replaceAll("(" + name +"=[^&]*)", name + "=" + accessToken);
}
return url;
}
2.将url中的参数部分提取出来
URL url = new URL(str);
String params = url.getQuery();
3.将url中的参数部分转换成Map
/**
* 解析出url参数中的键值对
* 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
* @param strUrlParam 请求参数部分
* @return map 请求参数map
*/
public static Map<String, String> convertMapFromParams(String strUrlParam) {
Map<String, String> mapRequest = new HashMap<String, String>();
String[] arrSplit = null;
if (strUrlParam == null) {
return mapRequest;
}
// 每个键值为一组
arrSplit = strUrlParam.split("[&]");
for (String strSplit : arrSplit) {
String[] arrSplitEqual = null;
arrSplitEqual = strSplit.split("[=]");
// 解析出键值
if (arrSplitEqual.length > 1) {
// 正确解析
mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]);
} else {
if (arrSplitEqual[0] != "") {
// 只有参数没有值,不加入
mapRequest.put(arrSplitEqual[0], "");
}
}
}
return mapRequest;
}
4.将url中非参数部分提取出来
方式一
URL url = new URL(str);
String basePath = url.getProtocol() + "://" + url.getAuthority() + url.getPath();
方式二 使用正则表达式提取
“(http[s]{0,1})+:[^\s]*\?”