Java处理字符串搜索嵌套结构的方法是什么
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,本篇文章给大家分享的是有关Java处理字符串搜索嵌套结构的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在用Java分析HTM
千家信息网最后更新 2025年11月15日Java处理字符串搜索嵌套结构的方法是什么
本篇文章给大家分享的是有关Java处理字符串搜索嵌套结构的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
在用Java分析HTML文本时,如果要取出有嵌套结构的节点之间的内容,不能直接用正则表达式来处理,因为Java所带的正则表达式不支持嵌套结构的描述,虽然Perl、.Net、PHP可以支持。这时可以先用正则表达式找出节点在字符串中的位置,然后对节点进行匹配处理,取出匹配节点之间的内容,实现对嵌套结构的处理。
例如要从
data=abcd1234中取出
之间的内容,希望返回两个字符串abcd和1234。源代码如下:
为了记录节点在字符串中的值和位置,先定义一个类,保存这些信息:
public class Tag { public Tag(String value, int beginPos, int endPos) { super(); this.value = value; this.beginPos = beginPos; this.endPos = endPos; } private String value; private int beginPos; private int endPos; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public int getBeginPos() { return beginPos; } public void setBeginPos(int beginPos) { this.beginPos = beginPos; } public int getEndPos() { return endPos; } public void setEndPos(int endPos) { this.endPos = endPos; } }从字符串中获取节点之间内容的函数如下:
/** * 获取字符串之间的内容,如果包含嵌套,则返回最外层嵌套内容 * * @param data * @param stag 起始节点串 * @param etag 结束节点串 * @return */ public Listget(String data,String stag, String etag){ // 存放起始节点,用于和结束节点匹配 Stack work = new Stack (); // 保存所有起始和结束节点 List allTags = new ArrayList (); // 在元字符前加转义符 String nstag = stag.replaceAll("([\\*\\.\\+\\(\\]\\[\\?\\{\\}\\^\\$\\|\\\\])", "\\\\$1"); String netag = etag.replaceAll("([\\*\\.\\+\\(\\]\\[\\?\\{\\}\\^\\$\\|\\\\])", "\\\\$1"); String reg = "((?:"+nstag+")|(?:"+netag+"))"; Pattern p = Pattern.compile(reg, Pattern.CASE_INSENSITIVE|Pattern.MULTILINE); Matcher m = p.matcher(data); while(m.find()){ Tag tag = new Tag(m.group(0),m.start(),m.end()); allTags.add(tag); } // 保存开始结束节点之间的内容,不含节点 List result = new ArrayList (); for(Tag t : allTags){ if (stag.equalsIgnoreCase(t.getValue())){ work.push(t); }else if(etag.equalsIgnoreCase(t.getValue())){ // 如果栈已空,则表示不匹配 if (work.empty()){ throw new RuntimeException("pos "+t.getBeginPos()+" tag not match start tag."); } Tag otag = work.pop(); // 如果栈为空,则匹配 if (work.empty()){ String sub = data.substring(otag.getEndPos(), t.getBeginPos()); result.add(sub); } } } // 如果此时栈不空,则有不匹配发生 if (!work.empty()){ Tag t = work.pop(); throw new RuntimeException("tag "+t.getValue()+ "not match."); } return result; } 函数返回节点之间内容串组成的列表。
例如 调用 get(data,"
", "") 返回含有两个元素的列表,元素分别为abcd, 1234需要注意的是如果节点含有正则表达式的元字符,需要在元字符前加转义符\\,源代码中第16,17行实现此功能。
以上就是Java处理字符串搜索嵌套结构的方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
节点
内容
字符
字符串
之间
结构
处理
正则
表达式
元字符
起始
方法
搜索
两个
位置
元素
函数
更多
源代码
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
珠海软件开发费用标准
数据库明细账表
北京智慧党建软件开发公司
删除服务器文件的记录
2u的服务器功耗
tp数据库英文
我的世界西瓜星球服务器号是多少
电脑网络安全密钥不匹配怎么了
网络安全倡议黑板报
软件开发好不好跑
php支持多种数据库吗
办了校园卡后网络安全密
做好网络安全宣传的题库
深圳服务器机柜哪个品牌好
修改网页上的数据库连接
怎么知道书籍被收进知网数据库
浙江工业软件开发亿连信
三台服务器的硬盘可以合并吗
数据库系统概论源代码
数据库差别
数据库两张的表内容对比
杭州手机软件开发怎样收费
全局型分布式数据库
数据库敏感语言有哪些
双十一淘宝服务器策略
安乡租房软件开发
软件开发演讲主题
数据库连接池安全问题
河北服务器机柜推荐厂家
敏捷软件开发考试