Самый простой способ удалить int из URL в Java? - PullRequest
2 голосов
/ 20 апреля 2011

У меня есть строка, содержащая URL.Я хочу извлечь из него только один фрагмент данных: int, который должен отображаться в строке запроса.

Так что, если url:

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

Я хочу получить «123» в int.

Какой самый элегантный способ сделать это?

Ответы [ 6 ]

4 голосов
/ 20 апреля 2011

Вы можете попробовать сопоставить только этот параметр в строке 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;
}
0 голосов
/ 22 апреля 2014

Это также может сделать работу:

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

Надеюсь, это поможет!

0 голосов
/ 20 апреля 2011

Вы можете использовать URL класс. i.e.:

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];

Это будет работать только для этого случая и не будет работать, если у вас есть дополнительные параметры или нет параметров. Существует ряд решений, которые разделят его на онлайн-карту параметров. Вы можете увидеть здесь .

0 голосов
/ 20 апреля 2011

Если это действительно так просто, как вы описали: в вашем 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());
0 голосов
/ 20 апреля 2011

Если часть строки запроса URL-адреса всегда одинакова (поэтому, если она всегда была iVar), вы можете использовать urlAsString.indexOf("iVar="), чтобы найти iVar=, а затем, зная число после этого, извлечь число. По общему признанию, это не наименее хрупкий подход.

Но если вы ищете все строки запроса, ответ Божо будет намного лучше.

0 голосов
/ 20 апреля 2011

Кажется, вы хотите получить параметры get и проанализировать их.У меня есть этот метод здесь (получил его откуда-то на SO, я думаю):

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...