2015-11-02 70 views
-1

比方說,我有這樣的事情:如何查找,替換並將包含xml的字符串拆分爲數組?

Sample 1: Your number is <foo>12345</foo> and your code is <foo>29939</foo>. 
Sample 2: Your number is <foo attr="x">12345</foo> and your code is <foo>29939</foo>. 

我想打破這個字符串轉換爲字符串數組。

喜歡的東西樣品1如下:

array[0] = Your number is 
array[1] = 12345 
array[2] = and your code is 
array[3] = 29939 

示例2:

array[0] = Your number is 
array[1] = x|12345 (adding attr value to it) 
array[2] = and your code is 
array[3] = 29939 

我找<foo>帶或不帶字符串屬性,需要相應地打破字符串。

我發現了一種簡單的方法,用一些值替換下面的東西。

例如:matcher.replaceAll("bar")這就造成了像:

Your number is bar and your code is bar 

我想看到什麼是至關斷串入一個數組或列表,每當我看到標籤<foo>的字符串值。

+1

String.split是你需要的 –

+0

嵌套標籤可能嗎?像'abc def xyz'?如果是這樣,他們應該如何處理? – Pshemo

+1

@ JunedAhsan我不這麼認爲。 OP需要更像解析這個半xml字符串的內容。 –

回答

0

假設您的文本的該格式沒有任何嵌套標籤你應該罰款的東西,如:

String[] arr = sentence 
     .trim() 
     .replaceAll("<foo\\s+attr=\"([^\"]+)\">", "<foo>$1|") 
     .replaceAll("^<foo>|</foo>\\.?$","") 
     .split("\\s?</?foo>\\s?"); 

這將:

  1. trim()在開始和結束脩剪空格您文字
  2. replaceAll("<foo\\s+attr=\"([^\"]+)\">", "<foo>$1|")將每個<foo attr="data">替換爲<foo>data|這意味着它會更改

    Your number is <foo attr=\"x\">12345</foo> and your code is <foo>29939</foo>. 
    

    Your number is <foo>x|12345</foo> and your code is <foo>29939</foo>. 
    //     ^^^^^^^ 
    

    所以現在我們只有<foo></foo>所以我們可以簡單地拆分這些標記

  3. replaceAll("^<foo>|</foo>\\.?$","")現在我們的字符串爲分裂做準備的<foo></foo>我們需要刪除字符串開頭和結尾的字符串以避免結果數組中有空元素

  4. split("\\s?</?foo>\\s?");分割爲<foo></foo>(包括圍繞它們的可選空白區域。