2011-06-09 19 views
1

我有這樣"abc=1, def=2, ghi=3"查詢,我需要把它解析成數組這樣 keys = [abc, def, ghi] and values = [1,2,3]代碼審查 - 分析查詢到陣列

目前

我的代碼是這樣的

String[] terms = query.split(","); 
    int termsCount = terms.length; 
    String[] keys = new String[termsCount]; 
    String[] values = new String[termsCount]; 

    for(int i=0; i<termsCount; i++) 
    { 
     if(terms[i].contains("=")) 
     { 
      keys[i] = terms[i].split("=")[0]; 
      values[i] = terms[i].split("=")[1]; 
     } 
    } 

有時,查詢可能是空的 - 我需要照顧這種情況。

我正在做這個對嗎?有一個更好的方法嗎?

編輯:感謝您的迴應傢伙! :)

@ Sean Patrick Floyd:我已將對象更改爲字符串。謝謝! @Matt Ball:對不起,我不能假設查詢總是會正常形成:(

+1

你能否假設查詢總是正確的?這個問題在http://codereview.stackexchange.com上可能會更好,但我不打算對它進行投票。 – 2011-06-09 14:29:28

+0

不,我不能這樣認爲。感謝您的鏈接,我也將它發佈在那裏! :) – sddsfg 2011-06-09 14:32:20

回答

3

我一定會用正則表達式來做這件事(我沒有測試它,它只是大圖片對我來說)

Pattern p = Pattern.compile("([a-z]+)=([0-9]+)"); 
Matcher m = p.matcher(query); 
while(m.find()){ 
    keys.add(m.group(1)); 
    values.add(m.group(2)); 
} 
+0

可能想要拋出一些關於使用'List '而不是'String []'的東西,這就是你的代碼所暗示的。 – 2011-06-09 14:35:47

+0

@Matt,是的,你說得對,我太懶惰 - 忙於做這件事 – bpgergo 2011-06-09 14:38:03

0
String[] terms = query.split(","); 

你可能想通過不只是一個逗號更加分裂,嘗試使用"\\s*,\\s*"代替(捕捉空白周圍的逗號爲好)

int termsCount = terms.length; 
String[] keys = new String[termsCount]; 
String[] values = new Object[termsCount]; 

爲什麼new Object[termsCount]?這不能編譯!它必須是new String[termsCount]

for(int i=0; i<termsCount; i++) 
{ 
    if(terms[i].contains("=")) 
    { 
     keys[i] = terms[i].split("=")[0]; 
     values[i] = terms[i].split("=")[1]; 

我想將其更改爲:

 String[] tokens = terms[i].split("\\s*=\\s*"); 
     keys[i] = tokens[0]; 
     values[i] = tokens[1]; 

    } 

有沒有else塊?如果沒有價值的鑰匙怎麼辦?

}