簡體   English   中英

在Java中從URL中剝離int的最簡單方法?

[英]Simplest way to strip an int out of a URL in Java?

我有一個包含URL的字符串。 我只想從中獲取一個數據:應該在查詢字符串中顯示的int。

因此,如果網址是:

HTTP://domain.tld/page.html的Ivar = 123

我想將“ 123”轉換為整數。

您知道執行此操作最優雅的方式是什么?

您可以嘗試僅匹配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;
}

這也可以做的工作:

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

希望能幫助到你!

看來您想獲取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);

如果URL的查詢字符串部分始終相同(因此,如果始終為iVar ),則可以使用urlAsString.indexOf("iVar=")查找iVar= ,然后知道數字在此之后,提取數字。 公認這不是最不易碎的方法。

但是,如果您要查找所有查詢字符串,那么Bozho的答案會更好。

如果它確實像您描述的那樣簡單: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());

您可以使用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];

不過,這僅適用於這種情況,如果您有其他參數或沒有參數,則將無法使用。 有許多解決方案可以在線將其拆分為參數映射,您可以在此處看到一些解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM