有 Java 编程相关的问题?

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

java如何拆分字符串(基于各种分隔符),但不保留空格?

Java字符串是带括号的布尔表达式,&|!作为运算符,我希望将它们拆分为标记。例如:

((!A1)&(B2|C3))应该变成"(","(","!","A1",")","&","(","B2","|","C3",")",")"

this answer之后,我发现可以将Java的String.split()与包含lookahead和lookahead子句的正则表达式一起使用:

List<String> tokens = "((!A1)&(B2|C3))".split("((?<=[!&()|])|(?=[!&()|]))")

我唯一的问题是,空白将包括在令牌列表中。例如,如果我将表达式写为( ( !A1 ) & ( B2 | C3 ) ),那么我的split()将产生至少四个类似" "的字符串,并且在变量周围有填充(例如" A1 "

如何修改这个split表达式和regex来标记字符串,但不保留任何witespace


共 (1) 个答案

  1. # 1 楼答案

    您可以使用此正则表达式来匹配所需内容,而不是拆分:

    [!&()]|[^!&()\h]+
    

    RegEx Demo

    正则表达式详细信息:

    • [!&()]:匹配!&()
    • |:或
    • [^!&()\h]+:匹配任何不是!&()和空白的字符

    代码:

    final String regex = "[!&()]|[^!&()\\h]+";
    final String string = "((!A1)&( B2 | C3 ))";
    
    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);
    
    List<String> result = new ArrayList<>();
    while (matcher.find()) {
        result.add(matcher.group(0));
    }
    
    System.out.println(result);