我应该设计一个接受两个参数发送者和接收者的系统,这两个参数对照规则集进行检查,如果匹配则返回true。 这两个参数可以接受%%和_之类的通配符,其作用类似于sql server中的查询。
例如:
输入:澳大利亚伦敦
规则: 1-%IR%,澳大利亚 2-美国伦敦 3-英国,加拿大
这将返回false
如果我们添加规则London,Austral%或规则Lon%,Australia%,... 这返回true
我该如何实现? Drool是执行此任务的正确工具吗?
谢谢。
答案 0 :(得分:1)
好吧,现在我已经了解了您的需求,这是解决方案: 我已经写了很多东西和印刷品,以便您可以轻松理解代码。
基本上,我首先将您的规则放入地图中,然后根据用户输入将发送者与接收者分开,如果输入以char“%”结尾,则将其用作通配符。
您可以通过注释/取消注释我在代码中输入的差异输入来测试差异输出。
让我知道:)
HashMap<String,String> map = new HashMap<>();
map.put("IR", "Australia");
map.put("London", "US");
map.put("UK", "CANADA");
String input = "London, Australia"; //false
// String input = "Lon%, US"; //true
// String input = "Lon%, U%"; //true
// String input = "U%, CANADA"; //true
StringTokenizer token = new StringTokenizer(input,",");
String senderInput = token.nextToken();
System.out.println("Sender:"+senderInput);
for(String senderMap : map.keySet()){
boolean firstCondition;
if(senderInput.endsWith("%")) {
String senderMatch = senderInput.replace("%", "");
firstCondition = senderMap.startsWith(senderMatch);
}else {
firstCondition = senderMap.equals(senderInput);
}
if(firstCondition){
System.out.println("Sender matched with "+senderMap);
String receiverInput = token.nextToken().replaceAll(" ","");
System.out.println("Receiver:"+receiverInput);
String receiverMap = map.get(senderMap);
boolean secondCondition;
if(receiverInput.endsWith("%")) {
String receiverMatch = receiverInput.replace("%", "");
secondCondition = receiverMap.startsWith(receiverMatch);
}else {
secondCondition = receiverMap.equals(receiverInput);
}
if(secondCondition){
System.out.println("MATCHING!");
}else{
System.out.println("NOT MATCHING!");
}
}
}