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

在Java中使用split方法解析一行,java,split,Java,Split,或 我想得到&fq=的所有数据,所以在第一种情况下&fq=contains request = GET /solr1/select?q=reqRelDate_l%3A%5B1321516800000+TO+1321775940000%5D+AND+requestStatus_s%3ASUB29&wt=javabin&version=1 HTTP/1.1 所以我希望filter应该包含从first&fq=开始的值,这意味着filter应该包含第一种情况下的以下值。请求可以有许多&

我想得到&fq=的所有数据,所以在第一种情况下&fq=contains

request = GET /solr1/select?q=reqRelDate_l%3A%5B1321516800000+TO+1321775940000%5D+AND+requestStatus_s%3ASUB29&wt=javabin&version=1 HTTP/1.1
所以我希望filter应该包含从first&fq=开始的值,这意味着filter应该包含第一种情况下的以下值。请求可以有许多&fq=,所以我希望过滤器的值从&fq=开始

doctype_s%3Acom.host.ems.qsrr.SurveyInstance
fq=%21survey_id_l%3A%2829%29
所以,如果我这样做-,那么我只得到&fq=的第一个值,而不是其他值。。那么,从first&fq=开始并替换这些东西&wt=javabin&version=1http/1.1

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

我需要解析上面的请求字符串,以便在筛选变量中获得&fq=的值。

我想您可以这样做:

filter = request.split("&fq=")[1];
String[]params=request.split(“&”);
列表值=新的ArrayList();
对于(int i=0;i1){
添加(fqsplit[1]);
}
}
}
现在您将有一个包含所有fq参数值的列表


当然,我可以想出更聪明的方法。

如果&fq=后面总是有另一个&VAR,您可以:


String fq_stuff=filter.split(“&”)[0]

如果它确实是fq的第一个实例,为什么不简单一点呢??我真的认为所有这些拆分和正则表达式有时都是多余的

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]);
        }
    }
 }
int firstFQ=request.indexOf(“&fq”);
if(firstFQ<0)
抛出新的SomeException();
int nextAmp=request.indexOf(&),firstFQ+1);
如果(nextAmp<0)
抛出新的SomeException();
返回请求。子字符串(firstFQ+3,nextAmp);//这里可能有一个off by 1错误

您可以通过使“&fq”成为一个漂亮的常量或传入一个参数来清理此问题。

那么您希望第一个&fq=之后的字符串的全部内容,还是只希望&fq=的值?我特别需要第一个&fq=之后的字符串的全部内容,但不是此
&wt=javabin&version=1 HTTP/1.1
,因为请求也包含该内容。。。问题已经很清楚了,我需要解析上面的行,这样我就可以得到过滤器变量中&fq=的值。如果有人要求你澄清,显然还不够清楚。我正在读取您的响应,因为您需要&fq参数的所有值?对吗?
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]);
        }
    }
 }
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