Java处理字符串搜索嵌套结构的方法是什么
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,本篇文章给大家分享的是有关Java处理字符串搜索嵌套结构的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在用Java分析HTM
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
服务器总是自动重启
专科生有能力搭建服务器么
酷狗的软件开发岗
数据库服务器软件点数
小米智能手表无法连接服务器
国外的代理服务器
检察院开展网络安全党支部活动
戊戌医药数据库
计算机网络技术高职教材
海淀网络安全产业园揭牌
打印存储服务器
淄博工厂库存软件开发
湖北网络技术提升工程
天地心网络技术公司
西南交大数据库复试
软件开发积极风险具体例子
FETION下载软件开发
数据库左右联接查询
冬奥网络安全保障应急预案
网络安全审查的思考
了解软件开发过程的一般情况
重设密码验证服务器失败
主域服务器软件
小学生网络安全教育小故事
学校网络安全周新闻稿
夏伸淏互联网智能科技有限公司
c 系统 数据库
asp网络数据库
plc数据库链接超时
服装公司域名服务器名ip地址