使用從this page圖案,我寫此示例代碼
String string = "((one = WORD) AND (two != 2) AND (three > 3) AND (four >= 4) AND (five < 5) AND (six <= 6) AND (seven IN (seven1, seven2)) AND (eight LIKE '1,2,3'))";
long start_time = System.currentTimeMillis();
Pattern pattern = Pattern.compile("\\(([^()]*|\\([^()]*\\))*\\)");
Matcher matcher = pattern.matcher(string);
while (matcher.find())
System.out.println(matcher.group());
long stop_time = System.currentTimeMillis();
System.out.println("Time " + (stop_time - start_time) + "ms");
輸出是完美的,但是每formance是尷尬,7-8秒
(one = WORD)
(two != 2)
(three > 3)
(four >= 4)
(five < 5)
(six <= 6)
(seven IN (seven1, seven2))
(eight LIKE '1,2,3')
Time 8017ms
編輯:現在解決了這樣的
string = string.substring(2, string.length() - 2);
String[] split = string.split("\\) AND \\(");
for (String s : split)
System.out.println(s);
我不靠近我的編譯器,所以我不能對此進行測試,但你嘗試過使用帶有「」AND「參數的字符串split()'方法?這應該返回給你一個字符串數組,如果你想要的話,那麼對於每個字符串,你可以修剪它,並刪除前導字符和尾隨字符(應該是括號) – Kon
如果一個值包含單詞「AND」,那麼怎麼辦?像'(一個= LAND)' –
這可能會感興趣...... https://stackoverflow.com/questions/17759004/how-to-match-string-within-parentheses-nested-in-java – Maxx