2011-04-19 68 views
2

我有一個包含URL的字符串。我只想從中得到一個數據:一個int,應該顯示在查詢字符串中。從Java中的URL中去除int的最簡單方法是什麼?

因此,如果網址是:

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

我想要得到 「123」 爲一個int。

你知道這樣做最優雅的方式是什麼?

+0

你想在服務器端嗎?或者你只是想要這個號碼? – 2011-04-19 23:01:53

+0

http://stackoverflow.com/questions/1667278/parsing-query-strings-in-java – Carsten 2011-04-19 23:05:55

回答

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

優秀!更通用一點: – Iraklis 2013-01-30 17:59:00

0

看來你想獲得參數並解析它們。我這裏有這個方法(有它從什麼地方上的話,我猜):

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); 
0

如果該URL的查詢字符串部分始終是相同的(所以如果它是總是iVar)你可以使用urlAsString.indexOf("iVar=")找到iVar=,然後知道數字是在那之後,提取數字。這當然不是最脆弱的方法。

但是,如果你正在尋找所有的查詢字符串,那麼Bozho的答案要好得多。

0

如果它真的和你描述的一樣簡單:你的URL只有一個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

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

這隻會工作的這種情況下,雖然,如果你有額外的params中,沒有PARAMS將無法正常工作。 有許多解決方案將它分成一個在線參數圖,你可以看到一些here

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

希望它能幫助!

相關問題