android 从此库中获取匹配字符相关的词

题目:从词库中将输入字符自动补全,如不存在则不进行补全,如补全结果为多个则按照词库顺序输出,输入字符不区分大小写。
           词库: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());
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值