2014-04-01 91 views
0

有問題,我得到了一個JSON響應來自一個請求,我將其轉換爲字符串可以說:替換字符串...什麼,我想

String response = client.execute(get, handler); 

響應看起來像:

"geometry":{"rings":[[[29470.26099999994,40220.076999999583],[29551.560999999754,40324.093000000343],[29597.470999999903,40391.253000000492],[29619.849999999627,40434.842000000179],[29641.708999999799,40471.713999999687],[29701.501000000164,40574.616000000387],[29722.775999999605,40611.230000000447],[29723.673000000417,40613.234999999404]]]} 

但我想有它看起來像下列操作之一:

"Coordinates":"29470.26099999994|40220.076999999583,29551.560999999754|40324.093000000343,29597.470999999903|40391.253000000492,45360.235000003|41478.4790000003,45360.2369999997|41478.4729999993,45353.8320000004|41470.7339999992,45372.21|41468.057,45371.8090000004|41467.1390000004" 

總之我想改變逗號betwe在[]集中的兩個座標用管道隔開「|」逗號,而不是和分離一組與兩個座標,而不是「],[」

我的嘗試:

response = response.replace("],[","\,"); 
response = response.replace("[[[","\""); 
response = response.replace("]]]","\""); 

但是它並沒有給我什麼,我想...... becuz我有沒有想法實現管道的替換...使用正則表達式但不知道如何。有人可以幫我請

+0

寫抄錄該問題的簡單主要功能。 – ceving

+1

替換不使用正則表達式... – assylias

+1

也許有點偏離主題,但它似乎你試圖解析JSON字符串。爲什麼不使用JSON解析器獲取Java對象,然後實現toString方法? – Thomas

回答

0

我認爲這應該工作:

String response = "[[[29470.26099999994,40220.076999999583],[29551.560999999754,40324.093000000343],[29597.470999999903,40391.253000000492],[29619.849999999627,40434.842000000179],[29641.708999999799,40471.713999999687],[29701.501000000164,40574.616000000387],[29722.775999999605,40611.230000000447],[29723.673000000417,40613.234999999404]]]"; 

response = response.replace(",", "|"); 
response = response.replace("]|[", ","); 
response = response.replace("[[[", "\""); 
response = response.replace("]]]", "\""); 
System.out.println(response); 
+0

謝謝你完全有效。 v直截了當。但是,我可否知道使用這個比較Gab答案是否有任何約束? Gab – 10e5x

+0

沒有約束,只是會變得更慢(對所有字符串進行4次全分析,而不是2次,而正則表達式通常更具性能,尤其是如果使用預編譯模式的話)。 – Gab

+0

是的,我認爲他們都工作。 Gab的解決方案表現更好,我的抓取更容易。我正在投票支持@Gab來平衡:-) – Dario

2

嘗試這樣的事情

String result = response.replaceAll("([^\\]])(\\,)","$1\\|").replaceAll("[\\[\\]]",""); 

=>([^ \\])(\\)=>([^\])(\,)每一個逗號不是由前面]

=> [\\ [\\] => [\[\]]每[或]

請注意,

  • 替換使用REG EXP使用String.replaceAll或Pattern
  • 字符串是不可改變的
+0

嗨,我試過你的解決方案,幾乎得到我想要的,但只是一些細微的差異。介意解釋()中的所有符號是什麼?,所以我可以做一些調整 – 10e5x

+0

目前你的答案將取代兩個座標的中間逗號爲|通過它是錯誤的:[12345.123,34567.12],[23456.23,4567]將成爲:12345.12 | 4567.12,23445.2 | 567 – 10e5x

+0

啊是的,周圍的字符也被捕獲,請參閱編輯 – Gab