2012-11-26 51 views
1

從一臺服務器,我得到以下形式的字符串:Java的字符串解析沒有正則表達式

String x = "fixedWord1:var1 data[[fixedWord2:var2 fixedWord3:var3 data[[fixedWord4] [fixedWord5=var5 fixedWord6=var6 fixedWord7=var7]]] , [fixedWord2:var2 fixedWord3:var3 data[[fixedWord4][fixedWord5=var5 fixedWord6=var6 fixedWord7=var7]]]] fixedWord8:fixedWord8"; 

(僅適用於空間劃分字-VAR對團體) 後來,我想將它們存儲在一個Hashmap ,如myHashMap.put(fixedWord1, var1);等。

問題:
裏面的第一"data[......]" - 標籤,其他"data[..........]"標籤都有效的數量是可變的,我不知道該字符串提前長度。

我不知道如何處理這樣的字符串,而不是採取String.split(),這是我們的任務給予者(大學)不鼓勵。

我搜查了互聯網,找不到解釋這些事情的適當網站。
如果有經驗的人可以給我一些鏈接到網站或像「圖示計劃」,這樣我就可以編碼一些東西,這將是非常有幫助的。

編輯: 得到的字符串錯誤(題外話,開始「請不要誹謗」 題外話端),正確的字符串(改變fixedWord7 = var7 ---到---> fixedWord7 = [var7]):

String x = "fixedWord1:var1 data[[fixedWord2:var2 fixedWord3:var3 data[[fixedWord4] [fixedWord5=var5 fixedWord6=var6 fixedWord7=[var7]]]] , [fixedWord2:var2 fixedWord3:var3 data[[fixedWord4][fixedWord5=var5 fixedWord6=var6 fixedWord7=[var7]]]]] fixedWord8:fixedWord8"; 
+3

您可以按照您的意願做一個遞歸算法。 – thatidiotguy

+0

你必須在java中執行此操作,或者可以使用sed/awk,爲什麼不能使用正則表達式? – Grammin

+1

也許你的大學會允許使用'Pattern'和'Matcher'類,甚至是'Scanner'? :)然而,它基於正則表達式。 –

回答

1

我sume你的字符串遵循相同的模式,其中有「數據」和「[」,「]」。和變量名/值將不包括這些字符串

  1. 刪除字符串 「數據[」, 「[」, 「]」,和 「」 從原始字符串

    replaceAll("data[", "") 
    replaceAll("[", "") 
    etc 
    
  2. 單獨字符串空格:「」通過使用StringTokenizer或循環通過字符串char char。

  3. 那麼你會得到字符串數組一樣

    fixedWorld1:var1 
    fixedWorld2:var2 
    ...... 
    fixedWorld4 
    fixedWorld5=var5 
    ...... 
    
  4. 然後由子串再次分開「:」或「=」。並將名稱/值放入地圖
+0

我應該使用這種類型的 – kiltek

+0

@kiltek我不確定你在問什麼? – Don

+0

replaceAll方法在哪裏,它是什麼樣的模式或任何我必須使用的組合。 – kiltek

1

問題不是絕對清楚,但可能是這樣會爲你工作:爲

Pattern p = Pattern.compile("\\b(\\w+)[:=]\\[?(\\w+)"); 
Matcher m = p.matcher(x); 
while(m.find()) { 
    System.out.println("matched: " + m.group(1) + " - " + m.group(2)); 
    hashMap.put (m.group(1), m.group(2)); 
} 
+0

這個工作非常好,但是請我道歉,我已經忘記了fixedWord7 = [var7]周圍的一些sqaure括號,因此上面的代碼完全省略了這個字符串。我將編輯我的帖子。 – kiltek

+1

好吧按照你編輯的問題檢查我編輯的答案。 – anubhava