2017-03-06 61 views
0

如何用替換函數替換奇數位置處的逗號與空格的出現?所以我想在1,3,7,9更換逗號......是......空間用空格替換奇數號逗號字符

字符串文本= [[[13,68],[134681],[13,6],[ 17,68],[13,68],[13,681],[135,68],[136,68],[13,68]]]

謝謝您的時間。

輸出字符串應該像下面這樣:我可以使用替換功能兩次,以取代「[」和「]」,但我不明白我怎麼能刪除使用的「Java」

逗號奇數次發生
13 68, 134 681,13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68 

更新1與正則表達式:以下數據具有X和Y座標爲SQL服務器的幾何數據類型。

文本= [[[148607.181567725,6818657.60249623],[147539.268528918,6817188.04749019],[144563.526399356,6817136.65513745],[144921.154209564,6818629.77966401],[146841.517476705,6819929.72166114],[148012.482915056,6819763.28604383],[148607.181567725,6818657.60249623]] ]

輸出:[[[148607.181567725 6818657.60249623 147539.268528918 6817188.04749019 144563.526399356 6817136.65513745 144921.154209564 6818629.77966401 146841.517476705 6819929.72166114 148012.482915056 6819763.28604383 148607.181567725 6818657.60249623]]]

+1

到目前爲止你做了什麼? – Maverick

+0

你可以替換],用東西,然後替換其餘的逗號,然後替換回],或使用正則表達式來替換逗號,但不能],或拆分字符串以分隔[不管]塊和重建與不同的分隔符。目前還不清楚什麼是輸入 – Akceptor

+0

結果應該如何? –

回答

3

可以使用該正則表達式,並使用$1 $2作爲替代捕獲數字

\\[*(\\d+)\\W*,\\W*(\\d+)\\]*

\\[*:零個或多個的[

(\\d+):捕獲後來用作替換$1一個或多個數字

\\W*,:零個或多個非單詞字符和,

(\\d+):替換爲$2秒捕獲組

\\]*:零個或多個的]

String s = "[[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]"; 
    String pattern = "\\[*(\\d+)\\W*,\\W*(\\d+)\\]*"; 
    System.out.println(s.replaceAll(pattern, "$1 $2")); 

輸出:

13 68, 134 681, 13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68 

更新:對於無符號十進制數你可以使用

\\[*(\\d*\\.?\\d+)\\D*,\\D*(\\d*\\.?\\d+)\\]*

演示

const regex = /\[*(\d*\.?\d+)\D*,\D*(\d*\.?\d+)\]*/g; 
 

 
const str = `[[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]`; 
 

 
const str2 = `[[[148607.181567725, 6818657.60249623], [147539.268528918, 6817188.04749019], [144563.526399356, 6817136.65513745], [144921.154209564, 6818629.77966401], [146841.517476705, 6819929.72166114], [148012.482915056, 6819763.28604383], [148607.181567725, 6818657.60249623]]]`; 
 

 
const subst = `$1 $2`; 
 
const result = str.replace(regex, subst); 
 
const result2 = str2.replace(regex, subst); 
 
console.log(result); 
 
console.log(result2);

注:符號值

[[[-148607.181567725, -6818657.60249623], [-147539.268528918, -6817188.04749019],

使用\\[*(-?\\d*\\.?\\d+)\\D*,[^-\\d]*(-?\\d*\\.?\\d+)\\]*

+0

謝謝:我在一個接受java代碼的groovy編譯器上運行此代碼,但我收到以下錯誤「美元符號後非法字符串正文字符 解決方案:字面美元符號「\ $ 5」或括號中的值表達式「 – user3384231

+0

我正在尋找Groovy語法來替換像'$ 1 $ 2'這樣的文字,它在java和演示(JS)中非常完美,當我完成時我會更新它 –

+0

@ user3384231嘗試使用's.replaceAll(pattern,「\ $ 1 \ $ 2」));' –

0

替換逗號在奇數位置上出現空格

這聽起來像你真正需要的是用括號替換逗號。如果是這樣,那麼如何使用正則表達式來查找這些字符?

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]"; 
System.out.println(s.replaceAll("\\][ ,]+\\[", "] [")); 

輸出:

[[13, 68] [134**,** 681] [13**,** 6] [17, 68] [13, 68] [13, 681] [135, 68] [136, 68] [13, 68]]] 

編輯:

我已經刪除了錯誤的逗號,這裏是一個更新版本:

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]"; 
System.out.println(s.replaceAll("\\[([^,]+)[ ,]+([^,]+)\\]", "[$1 $2]")); 

輸出:

[[13 68], [134** ** 681], [13** ** 6], [17 68], [13 68], [13 681], [135 68], [136 68], [13 68]]] 
+0

例如,我想用空格替換13和68之間的逗號,並在我更新的問題中看到輸出 – user3384231

+0

13 68,134 681,13 6,17 68,13 68,13 681,135 68,136 68, 13 68 – user3384231

+0

@ user3384231 oops,我替換了錯誤的逗號。我會編輯答案。 – Malt

相關問題