java - java split的正则表达式

标签 java regex split

我想从具有以下格式的文件中分割数据: {[(1;1;2),(5;1;2),(5;1;1)],[(1;3;2),(5;3;2),(5;1;2 )]}

这是我的 Java 方法:

public void createFromFile(String filename) throws IOException{
    BufferedReader br = new BufferedReader(new FileReader(filename));
    String s;
    while ((s = br.readLine()) != null) 
    {
        s = s.replace("{", "").replace("}", "").replace("]", "").replace(",", "");
        ArrayList<Surface> sf = new ArrayList<Surface>();
        for(String s1: s.split("\\["))
        { // <== not splitting here
            ArrayList<Point> tp = new ArrayList<Point>();
            for(String s2: s1.split("\\("))
            { // <== here neither
                String[] s3 = s2.split(";");
                tp.add(new Point(Double.valueOf(s3[0]),Double.valueOf(s3[1]),Double.valueOf(s3[2])));
            }
            sf.add(new Surface((Point[]) tp.toArray()));
        }
        convShape.add(new Body((Surface[])sf.toArray()));   
    }
}

为什么 s.split("\\[")s.split("\\(") 不拆分 s?

最佳答案

嗯,我认为这应该可行。就您当前的代码而言,它应该正确地拆分它。

但是,鉴于您只想要 numbers括号内。您不需要split这里。你让你的工作变得艰难。你最好使用PatternMatcher类,查找 ( 之间的所有内容和) 。您可以使用以下代码寻求帮助:-

    String str = "{[(1;1;2),(5;1;2),(5;1;1)],[(1;3;2),(5;3;2),(5;1;2)]}";

    Pattern pattern = Pattern.compile("(\\(\\d;\\d;\\d\\),?){3}");
    Matcher matcher = pattern.matcher(str);

    while (matcher.find()) {
        int i = 1;
        System.out.println("Polygon Coordinates: ");
        String[] coordinates = matcher.group(0).split(",");

        for (String point: coordinates) {
            System.out.println("Coordinate " + (i++) + ": " + point);

            point = point.replace("\\(", "").replace("\\)", "");
            String[] s3 = point.split(";");
            tp.add(new Point(Double.valueOf(s3[0]), Double.valueOf(s3[1]),
                             Double.valueOf(s3[2])));

        }

        sf.add(new Surface((Point[]) tp.toArray()));
        System.out.println();
    }

输出:-

Polygon Coordinates: 
Coordinate 1: (1;1;2)
Coordinate 2: (5;1;2)
Coordinate 3: (5;1;1)

Polygon Coordinates: 
Coordinate 1: (1;3;2)
Coordinate 2: (5;3;2)
Coordinate 3: (5;1;2)

说明:-

  • (\\(\\d;\\d;\\d\\),?){3} - 这匹配3 groups3 integers; 分隔里面brackets ,与 groupscomma(,) 分隔。然后它捕获完整的匹配。

  • matcher.find() - 从字符串中查找与上述模式匹配的所有内容。

  • matcher.group(0) - 获得完整的匹配。

  • 将整个匹配拆分为 comma(,)获取单独的坐标

  • 如果你想匹配doubleinteger; 分隔的值,您需要更改 Regex一点点。我留给你了。

  • 参见Pattern class docs有关各种的更多详细信息quantifiers{3}上述正则表达式中的 是量词之一。

关于java - java split的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121879/

相关文章:

java - 在 IntelliJ IDEA 11 中运行 Apache Felix 4.0.2

installation - 适用于 Windows 的 Java JRE 64 位下载?

javascript - 如何迭代多行字符串值的拆分结果数组以重新格式化某些行/换行符?

javascript split() 正则表达式

regex - 需要一个包含至少一个数字、零个或多个字母、无空格、最小/最大的正则表达式

c# - 拆分字符串并仅获取第一个值

java - 屏蔽控制台输入的密码: Java with nohup command

java - 等待进程和读取流之间的并发问题?

c# 正则表达式匹配排除第一个和最后一个字符

Python:以字节为单位的正则表达式和字符串长度