前提:昨天我家男人满面愁容的找我,问我一个问题。这个问题内容太长。大体呢就是做一个字典查询。不说闲话,下面是代码:
-----------------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------------
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;
}
}
运行结果为:
-----------------------------------------------------------------------------------我是分隔符--------------------------------------------------------------------------------------
下面这个代码很简单,想实现的功能更贴近需求,也比较符合面向对象的思想。个人觉得最重要的是他写不出来那么复杂的~~