0

我喜欢编写一个 java 实用方法,它在指定的查询字符串中返回 paramName 的 paramValue

Pattern p = Pattern.compile("\\&?(\\w+)\\=  (I don't know what to put here) ");

public String getParamValue(String entireQueryString, String paramName)
{
    Matcher m = p.matcher(entireQueryString);
    while(m.find()) {
        if(m.group(1).equals(paramName)) {
            return m.group(2);
        }
    }
    return null;
}

我将从我的 servlet 调用此方法,

    String qs = request.getQueryString(); //action=initASDF&requestId=9078-32&redirect=http://www.mydomain.com?actionId=4343
    System.out.println(getParamValue(qs, "requestId"));

输出应该是 9078-32

4

3 回答 3

1

您可以使用正则表达式否定组。请参阅另一个 SO 问题:Regular Expressions and negating a whole character group

您需要获取除&.

于 2012-09-18T11:13:11.483 回答
1

使用适当的API来执行此操作:request.getParameter("requestId")

于 2012-09-18T11:34:02.007 回答
0

您能否根据与符号 (&) 拆分字符串,然后在结果数组中搜索键(查找等号)。

这是 String.split() 的链接:http: //docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29

这是我正在谈论的事情的类型:

private static final String KEY_VALUE_SEPARATOR = "=";
private static final String QUERY_STRING_SEPARATOR = "&";

public String getParamValue(String entireQueryString, String paramName) {
    String[] fragments = entireQueryString.split(QUERY_STRING_SEPARATOR);
    for (String fragment : fragments){
        if (fragment.substring(0, fragment.indexOf(KEY_VALUE_SEPARATOR)).equalsIgnoreCase(paramName)){
            return fragment.substring(fragment.indexOf(KEY_VALUE_SEPARATOR)+1);
        }
    }
    throw new RuntimeException("can't find value");
}

最后的例外是一个非常垃圾的想法,但这并不是其中的重要部分。

于 2012-09-18T11:19:53.593 回答