在Java中我有:

String params = "depCity=PAR&roomType=D&depCity=NYC";

我想获得depCity参数的值(PAR,NYC).

所以我创建了正则表达式:

String regex = "depCity=([^&]+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(params);
m.find()返回false. m.groups()返回IllegalArgumentException.

我究竟做错了什么?

解决方法:

它不一定是正则表达式.因为我认为没有标准的方法可以处理这个问题,所以我使用的是从某个地方复制的东西(也许还有一些修改过):

public static Map> getQueryParams(String url) {
try {
Map> params = new HashMap>();
String[] urlParts = url.split("\\?");
if (urlParts.length > 1) {
String query = urlParts[1];
for (String param : query.split("&")) {
String[] pair = param.split("=");
String key = URLDecoder.decode(pair[0], "UTF-8");
String value = "";
if (pair.length > 1) {
value = URLDecoder.decode(pair[1], "UTF-8");
}
List values = params.get(key);
if (values == null) {
values = new ArrayList();
params.put(key, values);
}
values.add(value);
}
}
return params;
} catch (UnsupportedEncodingException ex) {
throw new AssertionError(ex);
}
}

因此,当您调用它时,您将获得所有参数及其值.该方法处理多值参数,因此List< String>而不是String,在你的情况下,你需要获得第一个列表元素.