代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
在文本中查找是否包含指定关键字
作者:
loolly
/ 发布于
2013/2/22
/
727
在文本中查找指定的关键字是否存在,经常用于敏感词查询等功能
import java.util.HashMap; import java.util.Map; import com.baijob.commonTools.LangUtil; /** * 单词树 * @author Luxiaolei * */ public class Words extends HashMap<Character, Words>{ private static final long serialVersionUID = -4646423269465809276L; /** 关键字类型,是否最后一个字符 */ public Map<Integer, Boolean> types = new HashMap<Integer, Boolean>(); public Words() { } /** * * @param type 类型 */ public Words(int type) { types.put(type, false); } /** * 增加单词 * @param word 单词 * @param type 类型 */ public void addWord(String word, int type){ //已经是单词的末尾 if(LangUtil.isEmpty(word)){ this.types.put(type, true); this.clear(); return; } //已经是关键字的末尾,则结束(即只保留最短字符串) Boolean isEnd = this.types.get(type); if(isEnd != null && isEnd) return; this.types.put(type, false); word = word.trim(); char currentChar = word.charAt(0); //跳过特殊字符(跳过本字符,从下一个字符开始) if(StopChar.isStopChar(currentChar)){ this.addWord(word.substring(1), type); return; } Words child = this.get(currentChar); if(child != null){ //已经存在子节点,在子节点中存放下一个字符 child.addWord(word.substring(1), type); }else{ //无子类,新建一个子节点后存放下一个字符 child = new Words(type); this.put(currentChar, child); child.addWord(word.substring(1), type); } } /** * 指定文本是否包含树中的词 * @param text 被检查的文本 * @param type 类型 * @return */ public boolean contains(String text, int type){ while(! LangUtil.isEmpty(text)){ Words words = this; char[] array = text.toCharArray(); for (char c : array) { //跳过特殊字符 if(StopChar.isStopChar(c)) continue; //子节点中子节点、类型为空表示词不存在 words = words.get(c); if(words == null) break; Boolean isEnd = words.types.get(type); if(isEnd == null) break; if(isEnd) return true; } text = text.substring(1); } return false; } /** * 获得第一个匹配的关键字 * @param text 被检查的文本 * @param type 类型 * @return */ public String getFindedFirstWord(String text, int type){ while(! LangUtil.isEmpty(text)){ StringBuilder sb = new StringBuilder(); Words words = this; char[] array = text.toCharArray(); for (char c : array) { //跳过特殊字符 if(StopChar.isStopChar(c)) continue; //子节点中子节点、类型为空表示词不存在 words = words.get(c); if(words == null) break; sb.append(c); Boolean isEnd = words.types.get(type); if(isEnd == null) break; if(isEnd) return sb.toString(); } text = text.substring(1); } return null; } }
试试其它关键字
查找关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
loolly
贡献的其它代码
(
2
)
.
水果忍者网页版
.
在文本中查找是否包含指定关键字
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3