我有一个包含URL的String。我想从中获取一个数据:一个应该显示在查询字符串中的int。
如果网址是:
http://domain.tld/page.html?iVar=123
我想把“123”变成一个int。
你知道这样做最优雅的方式是什么?
答案 0 :(得分:4)
您可以尝试仅在URL字符串中匹配该参数:
public static Integer getIVarParamValue(String urlStr) {
Pattern p = Pattern.compile("iVar=(\\d+)");
Matcher m = p.matcher(urlStr);
if (m.find()) {
return Integer.parseInt(m.group(1));
}
return null;
}
答案 1 :(得分:0)
似乎你想获取get参数并解析它们。我在这里有这个方法(从某个地方得到它,我猜):
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);
}
}
所以:
String var = WebUtils.getQueryParams(url).get("iVar");
int intVar = Integer.parseInt(var);
答案 2 :(得分:0)
如果网址的查询字符串部分始终相同(如果始终为iVar
),您可以使用urlAsString.indexOf("iVar=")
查找iVar=
,然后知道该数字是在此之后,提取数字。这无疑是最不脆弱的方法。
但如果您正在寻找所有查询字符串,那么Bozho的答案要好得多。
答案 3 :(得分:0)
如果它真的如你所描述的那么简单:你的URL中只有1个int,你想要的只是int,我会去寻找正则表达式。如果它实际上更复杂,请参阅其他答案。
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher("http://domain.tld/page.html?iVar=123");
if (m.find())
System.out.println(m.group());
答案 4 :(得分:0)
您可以使用URL课程。 即:
URL myUrl = new URL("http://domain.tld/page.html?iVar=123");
String query = myUrl.getQuery(); //this will return iVar=123
//at this point you can either parse it manually (i.e. use some of the regexp in the other suggestions, or use something like:
String[] parts = query.split();
String variable = parts[0];
String value = parts[1];
这仅适用于此情况,如果您有其他参数或没有参数,则无效。 有许多解决方案可以将其分成在线的param地图,你可以看到一些here。
答案 5 :(得分:0)
这也可以完成这项工作:
public static int getIntParam(HttpServletRequest request, String name, int defaultValue) {
String value = request.getParameter(name);
try {
if (value != null) {
return Integer.valueOf(value);
}
} catch (NumberFormatException e) {
}
return defaultValue;
}
希望它有所帮助!