Соответствующий набор правил в 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!");
}
}
}