关键字遍历,用于小文本遍历。
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 专门针对购物网站的产品品项,去做遍历并访问其产品资讯,以供数据分析。 无需登录个人资讯。 投放广告不...
3. **Items方法**:返回一个包含所有项的集合,根据关键字遍历。语法:`object.Items` 4. **Exists方法**:检查给定的关键字是否在字典中存在,返回True或False。语法:`object.Exists(key)` 5. **Remove方法**:...
用于遍历关键字出现的位置和次数,上传给大家仅供参考与技术交流
`foreach.cpp`通常是实现主程序逻辑的地方,可能包含了使用`foreach`关键字遍历容器的示例。`foreachDlg.cpp`和`foreachDlg.h`可能定义了一个对话框类,用于显示或交互操作,而`foreach.h`可能包含了`foreach`关键字...
- 使用 `For Loop` 关键字遍历每一行。 - 对于每行的特定列(如第1列和第6列),使用 `Get Text` 关键字获取文本,并使用 `Should Be Equal` 或 `Should Contain` 关键字来验证文本是否符合预期。 - 示例代码片段...
然而,Generator 允许我们通过 yield 关键字遍历我们自己的代码!这是一种超级强大的语法,实际上,我们可以操纵执行过程!从不太明显的取消操作开始,让我们先从同步操作开始吧。 我为文中提到的功能创建了一个代码...
- Python字典可以通过`for`循环和`in`关键字遍历其键。 - 使用`items()`方法可以同时遍历字典的键和值,配合for循环和序列解包可以方便地处理键值对。 - 字典在Python 3.7及更高版本中保持插入顺序,但在其他版本中...
#### 四、使用TYPE关键字遍历窗体控件 1. **遍历窗体上的所有控件**: - 使用`foreach`循环遍历窗体上的所有控件,并根据控件类型执行不同的操作。 ```csharp foreach (Control c in Controls) { if (c....
VBA遍历文件夹文件匹配关键字内容.zip
例如,下面是使用auto关键字遍历vector容器的示例: ```c vector<int> v; for (auto it = v.begin(); it != v.end(); it++) { printf("%d ", *it); } ``` auto关键字的注意事项 1. auto关键字类型推断发生在编译...
python工具,遍历Python关键字,直接使用无需任何环境,随时查看Python关键字。
- **关键字遍历**:使用 `keys()` 方法。 - **值遍历**:使用 `values()` 方法。 - **元素遍历**:使用 `items()` 方法。 - **示例**: ```python my_dict = {'name': 'John', 'age': 30, 'city': 'New York'} ...
"testmv_遍历文件、查找关键字并按需返回结果_"这个标题暗示了一个实用的脚本或程序,它能帮助用户高效地搜索文件内容,找到特定的关键字,并在满足特定条件时返回结果。这种功能对于日志分析、代码审查或者数据挖掘...
B树及关键字的插入删除和按层次遍历 B树是一种自平衡的搜索树,它能够保持树的平衡,使得树的高度尽可能小,从而提高搜索效率。B树的每个结点都包含一些关键字和指向子结点的指针,关键字之间是有序的。B树的插入、...
"QT遍历删除文件夹下所有文件及目录" 在QT应用程序中,需要遍历删除文件夹下所有文件及目录是一种常见的操作。本文将详细介绍如何使用QT框架实现该功能。 一、使用QDir和QFileInfo遍历删除文件夹 在QT中,可以...
本问题涉及的核心知识点是二叉树的遍历及其构造。根据前序和中序遍历序列,我们可以唯一地恢复一棵二叉树。下面我们将详细探讨这个过程。 首先,前序遍历的顺序是根节点 -> 左子树 -> 右子树,而中序遍历的顺序是左...
例如,在百度搜索中,搜索关键字“I爱你”将被编码为“%CE%D2%B0%AE%C4%E3”,MakeFileList 函数可以将其解码为原始字符串。 MakeFileList 函数是一个非常实用的 Delphi 函数,能够帮助开发者快速遍历文件夹和文件...
二叉排序树(Binary Sort Tree,BST)是一种特殊的二叉查找树(Binary Search Tree,BST),它的每个节点都包含一个关键字,且所有左子树中的关键字都小于当前节点的关键字,所有右子树中的关键字都大于当前节点的...
遍历文件夹下所有指定类型的文件及文件夹,有利于开发者迅速查找包含某一函数或关键字的文件
`as`关键字用于定义迭代变量。在循环体内,我们可以通过`user`访问当前元素的属性,如用户名、姓名和邮箱。 除了基本的遍历,Freemarker还提供了多种遍历list的扩展功能: 1. **条件判断**:在遍历过程中,可以...