我们有二维的整数数组:
int[][] XYZ = new int[][]{
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 2, 3, 4, 5, 6, 7, 8 },
{ 8, 7, 6, 5, 4, 3, 2, 1 },
{ 2, 2, 2, 2, 2, 2, 2, 2 },
{ 1, 2, 3, 4, 5, 6, 7, 8 }
};
和一个字符串:
String zapytanie = "((XYZ[i][0]==3 && XYZ[i][1]==4) || (XYZ[i][1]==3 || XYZ[i][2]==7))"
动态生成查询并传递给String。
我想要做的是解析这个String而不添加 外部工具/组件。
for(int i=0;i<XYZ.length;i++)
{
//todo parse here this expression
}
我们希望找到与String中的查询匹配的所有行并返回它们。
我的问题是我不知道如何将String解析为Query。就像从字符串zapytanie中删除这个“”并执行它一样。
我很确定我不能使用eval,但仍然需要学习新东西,所以我尝试了它:)
首次导入
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
第二
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
for(int i=0;i<XYZ.length;i++)
{
engine.eval(zapytanie);
}
错误:ReferenceError: "XYZ" is not defined.
知道如何解决这个错误,你能告诉我其他方法在不使用javascript的情况下完成任务吗?
我从我的查询中创建了一个后序树,但我想知道是否有更快的方法,然后使用这个树:
a是XYZ [i] [0],b是XYZ [i] [1],依此类推。
来自zapytanie = ((a=3 and b=4) or (b=3 or c=7))
http://i.imgur.com/T6gjT5W.png
我不知道如何使用这种树智能方式
答案 0 :(得分:0)
答案 1 :(得分:0)
我自己想出来了:)
((a<=1 and b=4) or (b=2 and c=7))
。我们从用户输入中获取query
作为String
。a is XYZ[i][0]
的和b is XYZ[i][1]
,int[][] array
等等。
首先我做的是检查查询是否正常 - 关于左/右括号的数量。如果没有,那就停在这里。
我将查询从String
更改为等于((a<=1 and b=4) or (b=2 and c=7))
到反向波兰表示法所以现在我的String
等于a<=1 b=4 and b=2 c=7 and or
RPN是延迟订购的。我创建了一个关于这个顺序的树,并为JTree添加了元素。 它看起来像这样:http://i.imgur.com/AK9hw6M.png
我以后序方式旅行我的树并解析每个项目。
如果我找到and
或or
之类的运算符,我会将其中的2个子节点用作上面的运算符的逻辑运算符之一,因此:&&
或||
。
在最后我有一个只有Boolean
值的root,告诉使用这行是否合适。