实际开发中关于模糊搜索的几种实现方式
2019-01-03 本文已影响0人
菜菜___
模糊搜索是社交平台、电商平台、搜索引擎等平台常见的功能。
写这篇文章前有两个问题:
问题一:在学校库里输入“北京 大学”,怎么样才能搜索到“北京大学“?
问题二:在学校库里输入“北京 大学”,怎么样才能搜索到“北京大学”“北京交通大学”“北京理工大学”“北京工业大学”“北京航空航天大学”等?
这两个问题里关键词都是“北京 大学”,中间有空格,而这种搜索的问题我们既可以用数据库语言实现,也可以在服务端进行处理。
使用SqlServer:
问题一:
select school_name from t_school where school_name = replace(school_name,' ','');
问题二:
select * from t_school where school_name like '北京'[^ ]'大学'
select * from t_school where school_name like '北京%大学'
使用Java:
问题一:
String str = " 北京 大学 ";
(1)去除所有空格,包括首尾、中间
String str = str.replaceAll(" +", "");
System.out.println("str:"+str);
注:str.trim()只能去除首尾空格
(2)利用正则匹配所有空格并替换,包括首尾、中间
String str = str.replaceAll(" +", "");
System.out.println("str:"+str);
(3)利用正则匹配所有空白字符(不限于空格)并替换,包括首尾、中间( \s 可以匹配空格、制表符、换页符等空白字符的其中任意一个)
String str = str.replaceAll("\\s*", "");
System.out.println("str:"+str);
问题二:
String str="北京 大学";
String[] a=str.split("\\s+");
String[] aa=new String[]{"北京交通大学","北京理工大学","北京工业大学","北京航空航天大学","上海北京大学"};
(1)使用正则
Pattern regex = Pattern.compile("^"+a[0]+".*"+a[1]+"$");
for(int i=0;i<aa.length;i++){
System.out.println(regex.matcher(aa[i]).find());
}
(2)字符串自带方法
for(int i=0;i<aa.length;i++){
if(aa[i].startsWith(a[0]) && aa[i].endsWith(a[1])){
System.out.println(aa[i]);
}
}
原文作者技术博客:https://www.jianshu.com/u/ac4daaeecdfe
95后前端妹子一枚,爱阅读,爱交友,将工作中遇到的问题记录在这里,希望给每一个看到的你能带来一点帮助。
欢迎留言交流。