使用大写字母和小写字母在Java中实现自动完成

时间:2018-07-02 06:37:00

标签: java autocomplete trie

为IDE设计自动完成功能。给定下面的String [],输入中包含一些大写字母和小写字母。我们要求实施自动完成功能,并且所有大写字母必须匹配。 例如:

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 :(得分:0)

实际上并不难,我希望这可以帮助您思考。不要在家庭作业中使用过多的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]*.*

一旦完成此正则表达式,我便会基于它过滤类名。