有 Java 编程相关的问题?

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

在java中如何使用条件拆分字符串

我试图仅在某些情况下用分隔符拆分字符串。 更具体地说,我想拆分split语句的条件。 我希望能够分开

"disorder == 1 or ( x < 100)"

进入

"disorder == 1" 
"(x < 100)"

如果我使用split("or"),我也会在disorder内部得到一个拆分:

"dis"
"der == 1"
"( x < 100)"

如果我尝试使用类似regex的split("[ )]or[( ]"),我会丢失( x < 100)的括号:

"disorder == 1"
"x < 100)"

我正在寻找一种只在分隔符被空格或括号包围时分割字符串的方法,但我希望保留周围的内容


共 (2) 个答案

  1. # 1 楼答案

    正如弗莱克斯在评论中指出的那样,您可以使用word boundary character

    The metacharacter \b is an anchor like the caret and the dollar sign. It matches at a position that is called a "word boundary". This match is zero-length.

    String x = "disorder == 1 or( x < 100)";
    for(String s : x.split("\\bor\\b"))
            System.out.println(s);
    

    结果:

    disorder == 1
    ( x < 100)

    有关使用“向前看/向后看”的解决方案,请参阅Kevins优秀答案

  2. # 2 楼答案

    您希望对空格/括号使用Lookaheads和Lookbehinds,所以类似这样:

    String input = "disorder == 1 or( x < 100)";
    String[] split = input.split("(?<=[ )])or(?=[ (])");
    
    • [ )][ (]表示查看空格或括号。当然,这可以用任何其他边界字符,甚至是文字正则表达式边界\\b替换
    • 这个(?<=...)是一个积极的回顾。因此,它只在前面有一个空格或)时匹配or,但不会在拆分时删除它们
    • 这个(?=...)是一个前瞻。因此,它只匹配or后面跟一个空格或(,但不使用拆分来删除它们

    Try it online.