Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式获取指定querystring中paramName的paramValue_Java_Regex - Fatal编程技术网

Java 使用正则表达式获取指定querystring中paramName的paramValue

Java 使用正则表达式获取指定querystring中paramName的paramValue,java,regex,Java,Regex,我喜欢编写一个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(entireQueryStr

我喜欢编写一个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,您可以使用regex否定组。见另一个问题:


您需要获取除&

之外的所有内容。您可以基于符号(&)拆分字符串,然后在结果数组中搜索键(查找等号)

下面是到String.split()的链接:

这就是我所说的类型:

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

最后的例外是一个相当垃圾的想法,但这并不是真正重要的部分。

使用适当的方法来实现它:
request.getParameter(“requestId”)
是的,我可以,但我认为这在性能方面不是一个好的解决方案。为什么不能使用
request.getParameter(“requestId”)
,因为您显然有一个
HttpServletRequest
?使用正则表达式重新实现查询解析器似乎不是最有效率的事情。。。