Java 使用正则表达式获取指定querystring中paramName的paramValue
我喜欢编写一个java实用程序方法,在指定的查询字符串中为paramName返回paramValueJava 使用正则表达式获取指定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
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
?使用正则表达式重新实现查询解析器似乎不是最有效率的事情。。。