在Java中使用split方法解析一行

时间:2011-11-18 00:26:08

标签: java split

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 =的值。

3 个答案:

答案 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来清理它。