我有一个用户界面,用户可以在其中建立查询,然后将这些条件应用于文本文件中的搜索。
假定字符串如下:A and (B or C)
我也可以访问每个值(A, B, C)
,逻辑运算符(and, or)
和分组括号。
所以我需要拥有的是:line.contains(A) && (line.contains(B) || line.contains(C))
boolean found = false;
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null && !contains) {
if (line.contains(A) && (line.contains(B) || line.contains(C))) {
found = true;
}
}
return found;
上述特定条件可能也不起作用,因为我正在每一行中搜索该条件,并且条件可能位于不同的行中。但这是我要处理的另一个问题:)
关于如何执行此操作的任何想法?
答案 0 :(得分:0)
根据您的评论,我可以使用ScriptEngineManager
解决我的问题。我正在建立要使用JavaScript
语言并进行engine.eval(query)
评估的条件。
private boolean containsSearchQuery(InputStream input, String searchQuery) {
boolean match = false;
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String lines = reader.lines().collect(Collectors.joining());
engine.put("lines", lines);
try {
match = (boolean) engine.eval(searchQuery);
} catch (ScriptException e) {
System.out.println("Error: " + e.getMessage());
}
return match;
}