2012-08-17 58 views
0

我试图检测使用Java的字符串(AND,OR,NOT)中的逻辑连接器。我想要做的是:检测逻辑连接器的最佳方法

  • 给定一个字符串(例如((蓝色)AND(黄色)或(粉红色)),将每个单词分开并放入一个List中,结果应该是类似{ “蓝”, “黄”, “粉红色”}

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

其他问题:是否有用的正则表达式或可能我必须使用contains()?

+0

你分开的话,然后..你应该与逻辑运算符? – Sednus 2012-08-17 14:27:26

回答

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] 
+0

感谢您的帮助!我试过了,效果非常好! – Noelia 2012-08-17 15:13:32

0
string s="((blue) AND (yellow) OR (pink))"; 
s.split("\bAND\b|\bNOT\b|\bOR\b"); 
0

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

编辑:哎呀,忘了\ B:

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

0

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

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

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

要做到这一点最简单的方法,是与识别 “逻辑串结构”

(...) AND (...)(...) OR (...)NOT (...)等递归...

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

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