0

我正在尝试使用 Java 检测字符串(AND、OR、NOT)中的逻辑连接器。我想做的是:

  • 给定一个字符串(例如 ((blue) AND (yellow) OR (pink)),将每个单词分开并将它们放在一个列表中。结果应该类似于 {"blue","yellow","pink"}

我知道为了匹配单词,我需要使用像 \b(AND|OR|NOT)\b 这样的正则表达式。但我不知道如何在连接符之后或之前返回每个单词。

其他问题:使用正则表达式有用还是我必须使用 contains()?

4

4 回答 4

3

这个怎么样?

String s = "((blue) AND (yellow) OR (pink))";
s = s.replaceAll("\\(|\\)", "");
String[] words = s.split("AND|OR|NOT");
System.out.println(Arrays.toString(words));

输出:

[blue ,  yellow ,  pink]
于 2012-08-17T14:31:23.923 回答
0
string s="((blue) AND (yellow) OR (pink))";
s.split("\bAND\b|\bNOT\b|\bOR\b"); 
于 2012-08-17T14:31:13.900 回答
0

您可以尝试使用string.split("AND|OR|NOT");.

编辑:哎呀,忘了\ b:

string.split("\b(AND|OR|NOT)\b");

于 2012-08-17T14:31:22.910 回答
0

解析这种字符串不是正则表达式的任务,正则表达式表示一个有限的预定义自动机。

您需要为此任务使用某种下推自动机。

http://en.wikipedia.org/wiki/Pushdown_automaton

最简单的方法是使用识别“逻辑字符串结构”的递归

(...) AND (...)(...) OR (...), NOT (...), 等等...

并去掉括号,然后重复,直到你发现一个与这种结构不匹配的字符串。

这个字符串就是你要找的。

于 2012-08-17T14:37:21.770 回答