-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 から多数の文字に一致します

(?<=)は、現在の位置の前にパターンがあるかどうかをチェックする肯定的な後読みです。(?<=a)bb

(?=)は、現在の位置の後のパターンをチェックa(?=b)する肯定的な先読みですab

于 2013-04-30T12:55:29.190 に答える
0

この正規表現は、取得できるブラケットごとにグループを生成します。\((.*)\)\sAND\s\((.*)\)

于 2013-04-30T12:56:32.943 に答える
0

そして、グアバを使用してもう1つ(楽しみのために):

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