Java中的匹配规则集
我应该设计一个系统,它接受两个参数发送方和接收方,这两个参数根据一组规则进行检查,如果它们匹配,则返回true。 这两个参数可以接受像%%和u这样的通配符,其作用类似于sql server中的查询 例如: 投入:澳大利亚伦敦 规则: 1%澳大利亚 2-美国伦敦 3-英国、加拿大 这返回false 如果我们加上伦敦规则、澳大利亚%规则或伦敦规则、澳大利亚%规则,。。。 这是真的 我怎样才能做到这一点? Drool是完成这项任务的合适工具吗Java中的匹配规则集,java,rule-engine,Java,Rule Engine,我应该设计一个系统,它接受两个参数发送方和接收方,这两个参数根据一组规则进行检查,如果它们匹配,则返回true。 这两个参数可以接受像%%和u这样的通配符,其作用类似于sql server中的查询 例如: 投入:澳大利亚伦敦 规则: 1%澳大利亚 2-美国伦敦 3-英国、加拿大 这返回false 如果我们加上伦敦规则、澳大利亚%规则或伦敦规则、澳大利亚%规则,。。。 这是真的 我怎样才能做到这一点? Drool是完成这项任务的合适工具吗 提前感谢。好的,现在我已经了解您需要什么,下面是解决方案:
提前感谢。好的,现在我已经了解您需要什么,下面是解决方案: 我已经写了很多东西和印刷品,所以你可以很容易地理解代码 基本上,首先我将您的规则放入一个映射中,根据用户输入,我将发送方和接收方分开,如果输入以字符“%”结尾,那么它将用作通配符 您可以通过注释/取消注释我在代码中输入的不同输入来测试不同的输出 让我知道:)
HashMap map=newhashmap();
地图放置(“IR”、“澳大利亚”);
地图放置(“伦敦”、“美国”);
地图放置(“英国”、“加拿大”);
字符串输入=“澳大利亚伦敦”//假的
//字符串输入=“Lon%,US”//真的
//字符串输入=“Lon%,U%”//真的
//字符串输入=“U%,加拿大”//真的
StringTokenizer令牌=新的StringTokenizer(输入“,”);
字符串senderInput=token.nextToken();
System.out.println(“发送方:+senderInput”);
for(字符串senderMap:map.keySet()){
布尔第一条件;
if(senderInput.endsWith(“%”){
字符串senderMatch=senderInput.replace(“%”,“”);
firstCondition=senderMap.startsWith(senderMatch);
}否则{
firstCondition=senderMap.equals(senderInput);
}
如果(第一个条件){
System.out.println(“发送方匹配”+发送方映射);
字符串receiverInput=token.nextToken().replaceAll(“,”);
System.out.println(“接收方:+接收方输入”);
字符串receiverMap=map.get(senderMap);
布尔二次条件;
if(receiverInput.endsWith(“%”){
字符串receiverMatch=receiverInput.replace(“%”,“”);
secondCondition=receiverMap.startsWith(receiverMatch);
}否则{
secondCondition=receiverMap.equals(receiverInput);
}
如果(第二个条件){
System.out.println(“匹配!”);
}否则{
System.out.println(“不匹配!”);
}
}
}
请提供到目前为止您获得的代码,并提供一个。没有它,我们将努力给你一个答案,这将有助于你。没有代码示例和清晰问题的问题往往会获得一些否决票。我为问题@Izlin添加了更多解释如果有人键入1
或US
,会发生什么?返回的是真还是假?我不明白你的规则:那是怎么分开的?如果我使用逗号作为分隔符,我会看到一个规则,如澳大利亚2-伦敦,非常奇怪,有一组规则是按顺序应用的。1-%IR%,澳大利亚是第一个规则。2-美国伦敦是第二条规则,也是如此on@Vahid那还好吗?
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!");
}
}
}