Использование заглавных и строчных букв для автозаполнения в Java - PullRequest
0 голосов
/ 02 июля 2018

Разработка функции автозаполнения для IDE. Учитывая приведенную ниже строку [], некоторые заглавные и строчные буквы включены во входные данные. Нас просят реализовать автозаполнение, и все заглавные буквы должны совпадать. например:

String[]  className {
        "GraphView",
        "DataGraphView",
        "DataController",
        "GraphViewController",
        "DataScienceView"
}

autocomplete(String[] className, "Data");  --> {"DataGraphView", "DataController", "DataScienceView"};
autocomplete(String[] className, "GVi");   -->  {"GraphView",  "GraphViewController"};
autocomplete(String[] className, "GraphController");   -->  {""};

Я думаю, что, возможно, я мог бы использовать Trie, но я не знаю, как обращаться с case2, который является "GVi". Кто-нибудь, кто мог бы помочь мне в этом? Любая идея или коды приветствуются! Большое спасибо!

1 Ответ

0 голосов
/ 02 июля 2018

Это на самом деле не так сложно, я надеюсь, это поможет вам думать. Не используйте слишком много StackOverflow для домашней работы, иначе у вас будут проблемы во время технических интервью в вашей жизни;)

public static String[] autocomplete(String[] classNames, String input) {
    String inputAsRegexp = input.replaceAll("([A-Z][a-z]*)", "$1[a-z]*") + ".*";
    return Arrays.stream(classNames).filter(className -> className.matches(inputAsRegexp)).toArray(String[]::new);
}

Первая строка готовит регулярное выражение из ввода. Он обнаруживает заглавную букву, за которой следуют любые строчные буквы, затем добавляет неограниченное количество строчных букв для перехода в конец сегмента имени. Затем он добавляет. * Соответствует оставшимся.

Пример: GVi -> G[a-z]*Vi[a-z]*.*

Как только я сделал это регулярное выражение, я просто отфильтровал имена классов на его основе.

...