Регулярное выражение, чтобы соответствовать конкретное слово и игнорировать конкретное слово - PullRequest
0 голосов
/ 09 октября 2018

В настоящее время у меня есть такой код

String[] departmentKeywords = trimmedArgs.split("\\s+");

У меня есть несколько отделов, например:

  • Младший менеджер

  • Средний менеджмент

  • Старший менеджмент

  • Топ-менеджмент

Как мне сделатьрегулярное выражение такое, что всякий раз, когда я набираю это:

junior middle 

будет возвращать людей из младшего и среднего звена

management

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

junior top management

Вернет людей в Младший менеджмент и топ-менеджмент

Спасибо.

Редактировать 1: В настоящее время у меня есть что-то вроде этого:

public class FilterDepartmentCommandParser implements Parser<FilterDepartmentCommand> {

    public FilterDepartmentCommand parse(String args) throws ParseException {
        String trimmedArgs = args.trim();
        trimmedArgs = trimmedArgs.replaceAll("(?i)management", "");
        if (trimmedArgs.isEmpty()) {
            throw new ParseException(
                    String.format(MESSAGE_INVALID_COMMAND_FORMAT, FilterDepartmentCommand.MESSAGE_USAGE));
        }

        String[] departmentKeywords = trimmedArgs.split("\\s+");

        return new FilterDepartmentCommand(new DepartmentContainsKeywordsPredicate(Arrays.asList(departmentKeywords)));
    }
}

В настоящее время это работает для всех 3 примеров, которые я перечислил выше.Тем не менее, это не работает, если я наберу слово «управление» 1-й, а затем ключевые слова.Например:

management top junior

Это должно вернуть мне людей из топ-менеджмента и младшего менеджмента.

Однако, это ничего не возвращает мне.Есть ли способ улучшить этот код?

1 Ответ

0 голосов
/ 10 октября 2018

Как насчет этого:

String[] departments = new String[] { "Junior Managment", "Middle Management", "Senior Management", "Top Management" };
String[] tests = new String[] { "management", "age", "junior", "mid", "op management", "uni middle", "junior middle management" };
for (String searchString : tests) {
    List<String> searchWords = new ArrayList<>(Arrays.asList(searchString.split(" ")));
    searchWords.replaceAll(String::toLowerCase);
    searchWords.removeIf("management"::contains);
    Set<String> matches = new HashSet<>(departments.length);
    matches.addAll(Stream.of(departments)
            .filter(d -> searchWords.stream().anyMatch(d.toLowerCase()::contains))
            .collect(Collectors.toSet()));

    System.out.println(searchString + ": " + matches);
}

Вывод:

management: []
age: []
junior: [Junior Managment]
mid: [Middle Management]
op management: [Top Management]
uni middle: [Middle Management, Junior Managment]
junior middle management: [Middle Management, Junior Managment]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...