在Java中从URL中剥离int的最简单方法是什么?

时间:2011-04-19 22:54:52

标签: java parsing url

我有一个包含URL的String。我想从中获取一个数据:一个应该显示在查询字符串中的int。

如果网址是:

http://domain.tld/page.html?iVar=123

我想把“123”变成一个int。

你知道这样做最优雅的方式是什么?

6 个答案:

答案 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;
}

希望它有所帮助!