Разбор строки с использованием метода split в Java - PullRequest
0 голосов
/ 18 ноября 2011
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 = содержит

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 = в переменной фильтра.

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

От макушки головы, я думаю, вы могли бы сделать что-то вроде этого:

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.

Конечно, я мог бы придумать что-нибудь более умное.

0 голосов
/ 18 ноября 2011

Если это действительно первый экземпляр 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" хорошей константой или переданным аргументом.

0 голосов
/ 18 ноября 2011

Если всегда есть & VAR, следующий за & fq =, вы можете сделать:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...