2011-11-18 140 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清理它。