• 简单写了一个类似全文检索的帮助类。


    前提:昨天我家男人满面愁容的找我,问我一个问题。这个问题内容太长。大体呢就是做一个字典查询。不说闲话,下面是代码:

    -----------------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------------

    import java.util.ArrayList;
    import java.util.List;

    public class search {

        public static void main(String[] args) {
            String str = "每数完";
           
            String[] vartext = { "每月", "每年", "每周", "一次性" };
            String[] typetext = { "数据上传", "数据填报", "数据采集", "前置机采集", "直连数据库采集" };
            String[] atttext = { "已完成", "等待", "执行", "暂停" };
            String[] datetext = { "2017-08-03", "2017-09-05", "2018-02-01",
                    "2018-01-13", "2018-03-01" };
            List<Integer> nu1 = searchli(str,vartext);
            System.out.println("项目周期需要模糊查询的为"+nu1);
            
            List<Integer> nu2 = searchli(str,typetext);
            System.out.println("项目类型需要模糊查询的为"+nu2);
            
            List<Integer> nu3 = searchli(str,atttext);
            System.out.println("项目状态需要模糊查询的为"+nu3);
            
            List<Integer> nu4 = searchli(str,datetext);
            System.out.println("项目开始时间需要模糊查询的为"+nu4);
            
            
        }
        /**比对检索
         * @param str
         * @param txt
         * @return
         */
        public static List<Integer> searchli(String str,String[] txt){
            char[] sig = str.toCharArray();
            
            List<List<Integer>> all = new ArrayList<List<Integer>>();
            for (int i = 0; i < sig.length; i++) {
                List<Integer> li = new ArrayList<Integer>();
                for (int j = 0; j < txt.length; j++) {
                    int mid = txt[j].indexOf(sig[i]);
                    if (mid > -1) {
                        li.add(j + 1);
                    }
                }
                all.add(li);
            }
            
            all = removeNull(all);
            
            for(int i =0 ;i<all.size()-1;i++ ){
                if(all.get(i+1).size()==0){
                    continue;
                }
                all.set(i+1, retainAll(all.get(i),all.get(i+1)));
            }
            if(all.size()==0){
                return null;
            }
            return all.get(all.size()-1);
        }
        
        /**
         * List 取交集
         * @param li
         * @param lt
         * @return
         */
        public static List<Integer>  retainAll(List<Integer> li,List<Integer> lt){
             if(li.size()>lt.size()){
                 li.retainAll(lt);
                 return li;
             }else{
                 lt.retainAll(li);
                 return lt;
             }
        }
        /**
         * list去空元素
         * @param li
         * @return
         */
        public  static  List<List<Integer>> removeNull(List<List<Integer>> li){
            List<Integer> list2 = new ArrayList<Integer>();
            List<List<Integer>> delnull = new ArrayList<List<Integer>>();
            delnull.add(list2);
            li.removeAll(delnull);
            return li;
        }
        
    }

    结果 为:

      改变str 的值 :

      

    这一篇算不上什么技术帖子,大体上就是类似于一个小型的工具类。

    -----------------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------------

    以下为 我家男人的代码:(比较简洁,面向对象)

    package com.louddt.ldp.collect.util;

    import com.louddt.ldp.utils.util.StringHandler;

    public class CycleType {
        
        private static final String ONE = "一次性";
        private static final String TWO = "每年";
        private static final String THREE = "每月";
        private static final String FOUR = "其他";
        
        private static String cycleType = "";
        
        public static String compareCycle(String cycle){
            if(CycleType.ONE.indexOf(cycle) != -1){
                cycleType = "1";
            }
            if(CycleType.TWO.indexOf(cycle) != -1 && StringHandler.isNotEmptyOrNull(cycleType)){
                cycleType = cycleType+",2";
            }else if (CycleType.TWO.indexOf(cycle) != -1) {
                cycleType = "2";
            }
            if(CycleType.THREE.indexOf(cycle) != -1 && StringHandler.isNotEmptyOrNull(cycleType)){
                cycleType = cycleType+",3";
            }else if (CycleType.THREE.indexOf(cycle) != -1) {
                cycleType = "3";
            }
            if(CycleType.FOUR.indexOf(cycle) != -1 && StringHandler.isNotEmptyOrNull(cycleType)){
                cycleType = cycleType+",4";
            }else if (CycleType.FOUR.indexOf(cycle) != -1) {
                cycleType = "4";
            }
            return cycleType;
        }
        
    }

    运行结果为:

     -----------------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------------

    下面这个代码很简单,想实现的功能更贴近需求,也比较符合面向对象的思想。个人觉得最重要的是他写不出来那么复杂的~~

  • 相关阅读:
    Jenkins知识地图
    PageObject&PageFactory
    robot framework-databaselibaray库使用(python)
    robot framework环境搭建
    使用instantclient_11_2 和PL/SQL Developer工具包连接oracle 11g远程数据库(转)
    (转)pip和easy_install使用方式
    图解:如何在LINUX中安装VM-Tools
    ANT简明教程[转载]
    Linux常用命令
    oracle数据分组
  • 原文地址:https://www.cnblogs.com/lyy9902/p/8391388.html
Copyright © 2020-2023  润新知