我有一些問題找到一種方法來轉換字符串,它代表幾何Linestring。座標顯示在(經度,緯度),我想變換(緯度,經度).. 例子:Java-正則表達式滑
LINESTRING (0 1, 3 2 , 4 5)
到
LINESTRING (1 0, 2 3 , 5 4)
是否有可能做正則表達式? 謝謝
我有一些問題找到一種方法來轉換字符串,它代表幾何Linestring。座標顯示在(經度,緯度),我想變換(緯度,經度).. 例子:Java-正則表達式滑
LINESTRING (0 1, 3 2 , 4 5)
到
LINESTRING (1 0, 2 3 , 5 4)
是否有可能做正則表達式? 謝謝
沒有大量使用正則表達式,你可以實現如下。我自己也不太瞭解正則表達式,從而提出一個簡單的解決方案...
考慮有關座標,你可以做到以下幾點: -
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];
它說,類型字符串不能使用reverse()函數... – cpfp 2014-11-06 18:19:32
檢查我編輯的代碼,我忘了從StringBuilder轉換爲String,將第二行改爲'c [i] = new StringBuilder (b [i])。reverse()。toString();'... – 2014-11-06 18:23:24
它不工作!我說我的錯誤..我現在測試了真實值,如(-9.157465 38.7183154),它給了我:4513817.38 564751.9- ...任何解決方案的想法? – cpfp 2014-11-07 14:59:24
如果你想切換的地方有兩個號碼用空格分開,你可以用replaceAll(regex, replacement)
來完成。
regex
代表用空格隔開的兩個數字可以像(\\d+) (\\d+)
\\d
代表一個數位(字符0
,1
... 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)
這是一個恥辱,因爲我不能給你正確的答案!它效果很好。 – cpfp 2014-11-07 09:51:17
是的,但你嘗試過什麼? – Reimeus 2014-11-06 18:06:52
首先,我嘗試了一段時間,但它不工作..所以,因爲我對正則表達式一無所知,所以我試圖看看有人知道我的例子的一些很好的例子。 – cpfp 2014-11-06 18:09:07
爲什麼正則表達式的要求? – vefthym 2014-11-06 18:14:04