Java中的匹配规则集

Java中的匹配规则集,java,rule-engine,Java,Rule Engine,我应该设计一个系统,它接受两个参数发送方和接收方,这两个参数根据一组规则进行检查,如果它们匹配,则返回true。 这两个参数可以接受像%%和u这样的通配符,其作用类似于sql server中的查询 例如: 投入:澳大利亚伦敦 规则: 1%澳大利亚 2-美国伦敦 3-英国、加拿大 这返回false 如果我们加上伦敦规则、澳大利亚%规则或伦敦规则、澳大利亚%规则,。。。 这是真的 我怎样才能做到这一点? Drool是完成这项任务的合适工具吗 提前感谢。好的,现在我已经了解您需要什么,下面是解决方案:

我应该设计一个系统,它接受两个参数发送方和接收方,这两个参数根据一组规则进行检查,如果它们匹配,则返回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!");
            }
        }
    }