题目:从词库中将输入字符自动补全,如不存在则不进行补全,如补全结果为多个则按照词库顺序输出,输入字符不区分大小写。
词库:java、android、mapbox、mapscloud、androidx、JavaScript
举例:
输入:jaa 输出:java、JavaScript
输入:drid 输出:android、androidx
输入:drdx 输出:androidx
输入:maclud 输出:mapscloud
解题思路:
正则表达式匹配输入的词,每个字符前后都有任意字符0次或多次,然后从词库中遍历匹配,匹配上的存放入结果集合;
还有一个问题是注意正则要忽略大小写。
代码:
private void getWords(){ //初始化词库 String[] strArray = new String[]{"java","android","mapbox","mapscloud","androidx","JavaScript"}; List<String> strs = Arrays.asList(strArray); Scanner scanner = new Scanner(System.in); String str = scanner.next(); // String str = "jaaa"; //匹配正则表达式 char[] chars = str.toCharArray(); StringBuffer sb = new StringBuffer(); sb.append("[\\d\\D]*");// [\d\D]代表任意字符 *出现0次或者多次 for (char c : chars) { sb.append(c).append("[\\d\\D]*"); } String reg = sb.toString(); //过滤匹配的单词 List<String> result = new ArrayList<>(); for (String s:strs) { Pattern pattern = Pattern.compile(reg,Pattern.CASE_INSENSITIVE);//忽略大小写 Matcher matcher = pattern.matcher(s); while (matcher.find()){ result.add(s); } } Log.i("TAG", "getWords: " + result.toString()); }