问题描述
在Java中我有:
String params = "depCity=PAR&roomType=D&depCity=NYC";
我想获得 depCity
参数的值(PAR,NYC)。
I want to get values of depCity
parameters (PAR,NYC).
所以我创建了正则表达式:
So I created regex:
String regex = "depCity=([^&]+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(params);
m.find()
返回false 。 m.groups()
返回 IllegalArgumentException
。
m.find()
is returning false. m.groups()
is returning IllegalArgumentException
.
我做错了什么?
推荐答案
它不一定是正则表达式。因为我认为没有标准的方法来处理这个问题,我使用的是我从某个地方复制过的东西(也许还有一些修改过):
It doesn't have to be regex. Since I think there's no standard method to handle this thing, I'm using something that I copied from somewhere (and perhaps modified a bit):
public static Map<String, List<String>> getQueryParams(String url) {
try {
Map<String, List<String>> params = new HashMap<String, List<String>>();
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<String> values = params.get(key);
if (values == null) {
values = new ArrayList<String>();
params.put(key, values);
}
values.add(value);
}
}
return params;
} catch (UnsupportedEncodingException ex) {
throw new AssertionError(ex);
}
}
所以,当你打电话给你时,你会得到所有参数及其值。该方法处理多值params,因此 List< String>
而不是 String
,在你的情况下,你'我需要得到第一个列表元素。
So, when you call it, you will get all parameters and their values. The method handles multi-valued params, hence the List<String>
rather than String
, and in your case you'll need to get the first list element.
这篇关于如何从给定的URL中提取参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!