2014-11-06 107 views
2

我有一些問題找到一種方法來轉換字符串,它代表幾何Linestring。座標顯示在(經度,緯度),我想變換(緯度,經度).. 例子:Java-正則表達式滑

LINESTRING (0 1, 3 2 , 4 5)

LINESTRING (1 0, 2 3 , 5 4)

是否有可能做正則表達式? 謝謝

+5

是的,但你嘗試過什麼? – Reimeus 2014-11-06 18:06:52

+0

首先,我嘗試了一段時間,但它不工作..所以,因爲我對正則表達式一無所知,所以我試圖看看有人知道我的例子的一些很好的例子。 – cpfp 2014-11-06 18:09:07

+0

爲什麼正則表達式的要求? – vefthym 2014-11-06 18:14:04

回答

3

沒有大量使用正則表達式,你可以實現如下。我自己也不太瞭解正則表達式,從而提出一個簡單的解決方案...

考慮有關座標,你可以做到以下幾點: -

String a = "0 1, 3 2 , 4 5"; 
String b[] = a.split(","); 
String c[] = new String[b.length]; 
for (i = 0; i < b.length; b++) { 
    c[i] = new StringBuilder(b[i]).reverse().toString(); 
} 
String new = c[0] + "," + c[1] + "," + c[2]; 
+1

它說,類型字符串不能使用reverse()函數... – cpfp 2014-11-06 18:19:32

+0

檢查我編輯的代碼,我忘了從StringBuilder轉換爲String,將第二行改爲'c [i] = new StringBuilder (b [i])。reverse()。toString();'... – 2014-11-06 18:23:24

+0

它不工作!我說我的錯誤..我現在測試了真實值,如(-9.157465 38.7183154),它給了我:4513817.38 564751.9- ...任何解決方案的想法? – cpfp 2014-11-07 14:59:24

2

如果你想切換的地方有兩個號碼用空格分開,你可以用replaceAll(regex, replacement)來完成。
regex代表用空格隔開的兩個數字可以像(\\d+) (\\d+)

  • \\d代表一個數位(字符01 ... 9
  • \\d+代表字符串從一個或多個數字
  • (\\d+)建會將\\d+中的匹配項放入組中,以便稍後重新使用它

現在,因爲每個數字是在分開的groups我們可以通過$x其中x表示組號,所以在這種情況下,我們可以把匹配從組2匹配之前,從組用火柴從這個組中replacement 1.

演示:

String text = "LINESTRING (0 1, 3 2 , 4 5)"; 
System.out.println("before replacing: "+text); 

text = text.replaceAll("(\\d+) (\\d+)", "$2 $1"); 
System.out.println("after replacing: "+text); 

輸出:

before replacing: LINESTRING (0 1, 3 2 , 4 5) 
after replacing: LINESTRING (1 0, 2 3 , 5 4) 
+0

這是一個恥辱,因爲我不能給你正確的答案!它效果很好。 – cpfp 2014-11-07 09:51:17