有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组Regex到拆分坐标字符串Java

我有以下字符串:

["lat\/lng: (49.47491213070514,-1.2361999005079265)","lat\/lng (42.478589638625664,-1.226332724094391)"]

我想用正则表达式将其拆分,这样我就可以将latLng数据输入一个数组

是否有一个表达式,以便我可以获取括号之间的数据


共 (2) 个答案

  1. # 1 楼答案

    您可以使用regex,(?<=\()[^)]*(?=\))

    演示:

    import java.util.Arrays;
    import java.util.regex.MatchResult;
    import java.util.regex.Pattern;
    
    public class Main {
        public static void main(String args[]) {
            // Test
            String str = "[\"lat\\/lng: (49.47491213070514,-1.2361999005079265)\",\"lat\\/lng (42.478589638625664,-1.226332724094391)\"]";
    
            String[][] arr = Pattern.compile("(?<=\\()[^)]*(?=\\))")
                                    .matcher(str)
                                    .results()
                                    .map(MatchResult::group)
                                    .map(s -> s.split(","))
                                    .toArray(String[][]::new);
    
            System.out.println(Arrays.deepToString(arr));
        }
    }
    

    输出:

    [[49.47491213070514, -1.2361999005079265], [42.478589638625664, -1.226332724094391]]
    

    ONLINE DEMO

    非流式解决方案:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Main {
        public static void main(String args[]) {
            // Test
            String str = "[\"lat\\/lng: (49.47491213070514,-1.2361999005079265)\",\"lat\\/lng (42.478589638625664,-1.226332724094391)\"]";
    
            Matcher matcher = Pattern.compile("(?<=\\()[^)]*(?=\\))").matcher(str);
    
            List<String[]> list = new ArrayList<>();
    
            while (matcher.find()) {
                list.add(matcher.group().split(","));
            }
    
            String[][] arr = list.toArray(new String[0][0]);
    
            System.out.println(Arrays.deepToString(arr));
        }
    }
    

    ONLINE DEMO

    regex101对正则表达式的解释:

    enter image description here

  2. # 2 楼答案

    \(([\.\-0-9]+)\,([\.\-0-9]+)\)
    

    当分别对该数组中的每个字符串执行时,将返回带有分隔值的匹配组。但我不知道如何用Java实现