-3

如何拆分以下字符串

String str = "(obj.userAge EQUALS  51) AND (obj.userAddress CONTAINS STREET1)";

所以我应该得到

string 1 = "obj.userAge EQUALS  512";
string 2 = "obj.userAddress CONTAINS STREET1"; 

我试过了

str.split("AND") 

但我需要不带括号的字符串

有时我可以从数据库中获取一个字符串,例如

String str = "(obj.userAge EQUALS  51) AND (obj.userAddress CONTAINS STREET1) OR (obj2.salary >= 3000)";

所以现在OR添加。

4

4 回答 4

3

试试这个:

public static void main(String[] args) {
    String str = "(obj.userAge EQUALS  51) AND (obj.userAddress CONTAINS STREET1)";
    Pattern pattern = Pattern.compile("\\((.+?)\\)");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

}

输出:

 obj.userAge EQUALS  51
 obj.userAddress CONTAINS STREET1
于 2013-04-30T12:58:58.923 回答
2

你应该把它和这个正则表达式匹配

(?<=\\().*?(?=\\))

.匹配单个字符。

*是一个匹配 0 到多个前面字符的量词

.*?懒惰地匹配 0 到多个字符

(?<=)是一个积极的lookbehind,它检查当前位置之前的模式。所以只有在它前面有a时(?<=a)b才会匹配b

(?=)是一个积极的前瞻,它检查当前位置之后的模式。所以只有在它后面跟着时a(?=b)才会匹配ab

于 2013-04-30T12:55:29.190 回答
0

此正则表达式将为每个括号生成一个组,然后您可以检索该组:\((.*)\)\sAND\s\((.*)\)

于 2013-04-30T12:56:32.943 回答
0

还有一个(为了好玩)使用番石榴:

 Iterable<String> result = Splitter.on(Pattern.compile("\\(|\\)|AND")).omitEmptyStrings().trimResults().split(input);
于 2013-04-30T13:06:02.360 回答