Java-正则表达式拆分

时间:2014-11-06 18:05:46

标签: java regex string

我遇到一些问题需要找到一种转换字符串的方法,它表示几何Linestring。坐标显示在(Lon,Lat),我想转换(Lat,Lon).. 例如:

LINESTRING (0 1, 3 2 , 4 5)

LINESTRING (1 0, 2 3 , 5 4 )

是否可以使用正则表达式? 感谢

2 个答案:

答案 0 :(得分: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 :(得分:2)

如果您想切换两个以空格分隔的数字,可以使用replaceAll(regex, replacement)进行切换  表示由空格分隔的两个数字的regex看起来像(\\d+) (\\d+)

  • \\d代表一位数字(字符01 ... 9
  • \\d+表示来自一个或多个数字的字符串构建
  • (\\d+)会将\\d+的匹配放入群组中,以便我们稍后重复使用

现在因为每个号码都在单独的groups中,我们可以replacement通过$x使用x代表组号的这些组中的匹配,所以在这种情况下我们可以在第1组比赛前将第2组的比赛放入。

演示:

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)