关键字遍历,用于小文本遍历。
import java.util.Arrays; public class KeywordTrigger { private String[] keywords = null; private char[] cs = new char[0]; private KeywordTriggerHandle handle = null; private int maxKeywordLength = 0; public KeywordTrigger(String...keywords) { this.keywords = keywords; for (String keyword : keywords) { if (keyword.length() > maxKeywordLength) { maxKeywordLength = keyword.length(); } } } public void parse() { StringBuilder sb = new StringBuilder(); char[] tcs = new char[maxKeywordLength]; for (int i = 0; i < cs.length; i++) { char c = cs[i]; appendChar(tcs, c); // 临时关键字容器填充 sb.append(c); for (String keyword : keywords) { char[] myKeywords = keyword.toCharArray(); // 从临时关键字容器中提取关键字,并与指定关键字比较 if (Arrays.equals(extractCharArray(tcs, myKeywords), myKeywords) == true) { // 从字符串中删除关键字 sb.delete(sb.length() - myKeywords.length, sb.length()); String str = sb.toString(); if (str != null && !"".equals(str)) { handle.contentTrigger(str); } handle.keywordTrigger(new String(myKeywords)); sb = new StringBuilder(); tcs = new char[maxKeywordLength]; continue; } } } handle.contentTrigger(sb.toString()); } /** * 追加字符,在数组首位置的字符将被抛弃 * @param cs * @param c */ private static void appendChar(char[] cs, char c) { int length = cs.length; for (int i = 0; i < length; i++) { if (i < length - 1) { cs[i] = cs[i + 1]; } } cs[length - 1] = c; } private static char[] extractCharArray(char[] cs, char[] kwcs) { if (cs.length < kwcs.length) { throw new IllegalArgumentException("cs length must greater than kwcs length"); } char[] ncs = new char[kwcs.length]; int st = cs.length - kwcs.length; for (int i = 0;i < cs.length; i++) { ncs[i] = cs[i + st]; if (i + st >= cs.length - 1) { break; } } return ncs; } public void setSource(String src) { cs = src.toCharArray(); } public void setHandle(KeywordTriggerHandle handle) { this.handle = handle; } public static abstract class KeywordTriggerHandle { public abstract void contentTrigger(String str); public abstract void keywordTrigger(String keyword); } }
测试代码:
KeywordTrigger trigger = new KeywordTrigger("<b>", "</b>", "<br>", "<36>", "</36>");
trigger.setSource("<b>这是标题</b><br><36>hello,这是36号字体</36>okay,信息分析完成。");
KeywordTrigger trigger = new KeywordTrigger(keywords);
trigger.setHandle(new KeywordTriggerHandle(){ @Override public void contentTrigger(String str) { printText(str); } @Override public void keywordTrigger(String keyword) { } }); trigger.parse();
相关推荐
用关键字遍历购物网站,将搜寻结果清单存入excel 使用关键字遍历Momo购物网站并将搜索结果列表保存到Excel 专门针对购物网站的产品品项,去做遍历并访问其产品资讯,以供数据分析。 无需登录个人资讯。 投放广告不...
用于遍历关键字出现的位置和次数,上传给大家仅供参考与技术交流
然而,Generator 允许我们通过 yield 关键字遍历我们自己的代码!这是一种超级强大的语法,实际上,我们可以操纵执行过程!从不太明显的取消操作开始,让我们先从同步操作开始吧。 我为文中提到的功能创建了一个代码...
python工具,遍历Python关键字,直接使用无需任何环境,随时查看Python关键字。
遍历文件夹下所有指定类型的文件及文件夹,有利于开发者迅速查找包含某一函数或关键字的文件
如果给出了遍历二叉树的前序序列和中序序列,则可以构造出唯一的一棵二叉树。试编写实现上述功能的程序。 [基本要求] 已知一棵二叉树的前序和中序序列,试设计完成下列任务的一个算法: (1)构造一棵二叉树...
QT遍历删除文件夹
(1)画出如图(1)所示无向图的邻接矩阵和邻接表,列出该图的广度优先遍历和深度优先遍历结果(选定A为出发点进行遍历)。 (2)画出如图(2)所示有向图的邻接矩阵和邻接表,列出该图的广度优先遍历和深度优先遍历...
查找算法,二叉排序树,二叉树层次遍历,二叉树非递归遍历,二叉树的建立,关键字匹配查找等。 如有问题,可随时私信。 初学C语言必须掌握的一些基础知识,包括直接选择排序、直接插入排序、冒泡排序、快速排序。 ...
遍历文件、查找文件中指定状态的值大于指定值时返回结果
查找算法,二叉排序树,二叉树层次遍历,二叉树非递归遍历,二叉树的建立,关键字匹配查找等。 如有问题,可随时私信。 初学C语言必须掌握的一些基础知识,包括直接选择排序、直接插入排序、冒泡排序、快速排序。 ...
数据结构B树及关键字的插入删除和按层次遍历-Read.pdf
foreach遍历是C#常见的功能,而本文通过实例形式展现了C#使用yield关键字让自定义集合实现foreach遍历的方法。具体步骤如下: 一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现...
数据结构实验:B树及关键字的插入,删除和按层次遍历.doc
MFC界面提示 可以选择打开excel文件 能够读取所有工作表的内容 进行遍历搜索 返回相关信息
所有在反序列化Json字符串时需要一种通用的转换方式,而不是写死的某个类的反序列化,这里介绍的一种思路就是使用dynamic关键字来实现通用反序列化并比较反序列化后的对象是否深度相等即比较对象的各个字段是否相等...
robotframework常⽤关键字 常⽤关键字 robotframework关键字 ...如果直接在"Import Library"关键字后定义库名,则RF会遍历python安装⽬录下,找相关库。 如果定义的是.py⽂件地址,则执⾏该⽂件。例如: 执⾏结果如下:
定义B-树插入关键字函数、删除关键字函数、查找关键字函数以及按层次遍历输出B-树所有结点的函数。主函数定义菜单(1.插入关键字 2.删除关键字 3. 查找关键字 4.层次遍历输出B-树所有结点 5.结束程序)。
输入一组关键字,排列成一棵二叉排序树,最后中序遍历其结果
定义B-树插入关键字函数、删除关键字函数、查找关键字函数以及按层次遍历输出B-树所有结点的函数。主函数定义菜单(1.插入关键字 2.删除关键字 3. 查找关键字 4.层次遍历输出B-树所有结点 5.结束程序)。