request = GET /solr1/select?q=reqRelDate_l%3A%5B1321516800000+TO+1321775940000%5D+AND+requestStatus_s%3ASUB29&wt=javabin&version=1 HTTP/1.1
或
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 = contains
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 =开始获取所有值并更换这些东西的最佳方法是什么{ {1}}
&wt=javabin&version=1 HTTP/1.1
我需要解析上面的请求字符串,以便我可以在过滤器变量中获得& fq =的值。
答案 0 :(得分: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。
当然,我能想出更聪明的东西。
答案 1 :(得分:0)
如果总有另一个&amp; VAR跟随&amp; fq =,你可以这样做:
String fq_stuff = filter.split("&")[0];
答案 2 :(得分: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
你可以通过使“&amp; fq”成为一个漂亮的常数或传入的arg来清理它。