2011-11-18 74 views
-2
request = GET /solr1/select?q=reqRelDate_l%3A%5B1321516800000+TO+1321775940000%5D+AND+requestStatus_s%3ASUB29&wt=javabin&version=1 HTTP/1.1 

解析Java中

request = GET /solr1/select?q=reqRelDate_l%3A%5B1321516800000+TO+1321775940000%5D+AND+requestStatus_s%3ASUB29&wt=javabin&version=1 HTTP/1.1 

采用分体式方法的线,我想& FQ =所以在第一种情况下& FQ =包含

的所有数据
doctype_s%3Acom.host.ems.qsrr.SurveyInstance 
fq=%21survey_id_l%3A%2829%29 

所以我想过滤器应该包含从第一个开始的值& fq =这意味着过滤器应该包含第一种情况的下面的值。并要求可以有很多& FQ =所以我想筛选出具有价值从& FQ开始=

doctype_s%3Acom.host.ems.qsrr.SurveyInstance&fq=%21survey_id_l%3A%2829%29 

所以,如果我这个做的方式 - 然后我只得到第一个值的& FQ =没有其他价值。那么什么是让所有从第一& FQ开始=和更换这些事情&wt=javabin&version=1 HTTP/1.1

filter = request.split("&fq=")[1]; 
价值的最佳途径

我需要解析上述请求字符串,这样我可以在过滤器变量& FQ =值..

+0

所以你想第一和FQ =或者只值和FQ后的字符串的全部内容=? – Casey

+1

而你的问题是..? – nhaarman

+1

那么最新的问题呢? – Shahzeb

回答

1

关闭我的头顶,我想你可以做这样的事情:

String[] params = request.split("&"); 
List<String> values = new ArrayList<String>(); 
for (int i = 0; i < params.length; i++) { 
    if (params[i].startsWith("fq")) { 
     String[] fqsplit = params[i].split("="); 
     if (fqsplit.length > 1) { 
      values.add(fqsplit[1]); 
     } 
    } 
} 

现在您将拥有一个包含所有fq参数值的List。

当然我可以想出更聪明的东西。

0

如果总有另一个& VAR以下& FQ =,你可以这样做:

String fq_stuff = filter.split("&")[0];

0

如果它是真正的FQ的第一个实例,为什么不能是简单?我真的认为所有这些分裂和正则表达式有时候是过度的。

int firstFQ = request.indexOf("&fq"); 
if (firstFQ < 0) 
    throw new SomeException(); 
int nextAmp = request.indexOf("&", firstFQ+1); 
if (nextAmp < 0) 
    throw new SomeException(); 
return request.subString(firstFQ+3, nextAmp); // I may have an off by 1 error here 

您可以通过“& FQ”一个很好的固定或通过一个ARG清理它。