我试图检测使用Java的字符串(AND,OR,NOT)中的逻辑连接器。我想要做的是:检测逻辑连接器的最佳方法
- 给定一个字符串(例如((蓝色)AND(黄色)或(粉红色)),将每个单词分开并放入一个List中,结果应该是类似{ “蓝”, “黄”, “粉红色”}
我知道,匹配的话,我需要使用像\ b A正则表达式(AND | OR | NOT)。\ b 但我不t知道如何返回连接器之后或之前的每个单词。
其他问题:是否有用的正则表达式或可能我必须使用contains()?
我试图检测使用Java的字符串(AND,OR,NOT)中的逻辑连接器。我想要做的是:检测逻辑连接器的最佳方法
我知道,匹配的话,我需要使用像\ b A正则表达式(AND | OR | NOT)。\ b 但我不t知道如何返回连接器之后或之前的每个单词。
其他问题:是否有用的正则表达式或可能我必须使用contains()?
这个怎么样?
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]
感谢您的帮助!我试过了,效果非常好! – Noelia 2012-08-17 15:13:32
string s="((blue) AND (yellow) OR (pink))";
s.split("\bAND\b|\bNOT\b|\bOR\b");
您可以尝试使用string.split("AND|OR|NOT");
。
编辑:哎呀,忘了\ B:
string.split("\b(AND|OR|NOT)\b");
解析这种字符串是对正则表达式没有任务,正则表达式代表一个预定义的有限自动机。
您需要为此任务使用某种下推自动机。
http://en.wikipedia.org/wiki/Pushdown_automaton
要做到这一点最简单的方法,是与识别 “逻辑串结构”
(...) AND (...)
或(...) OR (...)
,NOT (...)
等递归...
,并除去括号,并重复,直到你发现一个不匹配这种结构的字符串。
这个字符串就是你要找的。
你分开的话,然后..你应该与逻辑运算符? – Sednus 2012-08-17 14:27:26