Соответствующий набор правил в Java

Я должен спроектировать систему, которая принимает два параметра отправителя и получателя, и эти два параметра проверяют набор правил и возвращают true, если они совпадают. Эти два параметра могут принимать дикие символы, такие как %% и _, которые действуют как запрос на сервере SQL.

Например:

Вход: Лондон, Австралия

Правила: 1- %IR, Австралия 2- Лондон, США 3- Великобритания, Канада

Это возвращает ложь

Если мы добавим правило London,Austral% или rule Lon%,Australia%,... это возвращение true

Как мне этого добиться? Является ли Drool подходящими инструментами для выполнения этой задачи?

Заранее спасибо.

1 ответ

Хорошо, теперь, когда я понял, что вам нужно, вот решение: я написал много материала и печатных изданий, чтобы вы могли легко понять код.

Сначала я поместил ваши правила в карту, и на основе пользовательского ввода я отделяю отправителя от получателя, и если ввод заканчивается символом "%", то он используется в качестве подстановочного знака.

Вы можете протестировать разные результаты, комментируя / раскомментируя различные входные данные, которые я поместил в код.

Дай мне знать:)

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!");
            }
        }
    }
Другие вопросы по тегам