代码之家  ›  专栏  ›  技术社区  ›  bbKing

在Lookback中不允许重复Java正则表达式

  •  0
  • bbKing  · 技术社区  · 4 年前

    我正在寻找一种在每三个逗号后拆分字符串的方法。我找到了2013年的老答案 Split a String at every 3rd comma in Java 我认为这已经过时了。如果我复制粘贴接受的答案,我会得到一个编译错误

    禁止在后面看时重复

    如果有必要的话,我将Intellij与Java 11结合使用

    下面是链接帖子中已接受答案的示例

    String data = "0,0,1,2,4,5,3,4,6";
    String[] array = data.split("(?<=\\G\\d+,\\d+,\\d+),"); 
    for(String s : array){
        System.out.println(s);
    }
    

    如果上述情况不再正确,正确的方法是什么?

    enter image description here

    1 回复  |  直到 4 年前
        1
  •  1
  •   rzwitserloot    4 年前

    在各种情况下,不允许在前向/后向中无限重复。然而,这不是其中之一。

    你发现了一个IntelliJ bug。intellij正在报告该漏洞(不是 javac ).它错误地认为这是你做不到的事情之一。

    告诉intellij别发牢骚了。有点可能你做不到。我想,提交一份错误报告吧。关键是,如果你获取源文件并运行 javac ThatFile.java 它编译和运行没有问题。

    你可以通过“假装”intellij来解决这个问题。它对该字符串进行编译时检查,因为intellij意识到,作为一个常量,它可以做到这一点。在这里,你可以把intellij的分析变成一个动态字符串,从而避开它。例如:

    data.split((System.currentTimeMillis() < 0 ? "A?" : "") + "(?<=.. rest of regex here ..");
    

    IntelliJ现在可能会确定字符串是动态的,因此无法进行分析。因此,它不会。

    但是,在跳过这些愚蠢的圈套之前,intellij中可能有一个关于“regex文本的智能分析”之类的背景。至少关闭它,直到这个错误被修复。