返回顶部
首页 > 资讯 > 精选 >Java处理字符串搜索嵌套结构的方法是什么
  • 600
分享到

Java处理字符串搜索嵌套结构的方法是什么

2023-06-17 11:06:24 600人浏览 独家记忆
摘要

本篇文章给大家分享的是有关Java处理字符串搜索嵌套结构的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在用Java分析html文本时,如果要取出有嵌套结构的节点之间

本篇文章给大家分享的是有关Java处理字符串搜索嵌套结构的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在用Java分析html文本时,如果要取出有嵌套结构的节点之间的内容,不能直接用正则表达式来处理,因为Java所带的正则表达式不支持嵌套结构的描述,虽然Perl、.netPHP可以支持。这时可以先用正则表达式找出节点在字符串中的位置,然后对节点进行匹配处理,取出匹配节点之间的内容,实现对嵌套结构的处理。

例如要从

<pre name="code" class="java">data=<div><div>abcd<div></div><fORM><input type='button' value='submit'/></form></div></div><div>1234</div>

中取出<div></div>之间的内容,希望返回两个字符串

<pre name="code" class="java"><div>abcd<div></div><form><input type='button' value='submit'/></form></div><pre name="code" class="html">和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;      }        }

从字符串中获取节点之间内容的函数如下:

        public List<String> get(String data,String stag, String etag){      // 存放起始节点,用于和结束节点匹配      Stack<Tag> work = new Stack<Tag>();      // 保存所有起始和结束节点      List<Tag> allTags = new ArrayList<Tag>();            // 在元字符前加转义符      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<String> result = new ArrayList<String>();            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,"<div>", "</div>") 返回含有两个元素的列表,元素分别为

<div>abcd<div></div><form><input type='button' value='>'/></form></div>, 1234

需要注意的是如果节点含有正则表达式的元字符,需要在元字符前加转义符\\,源代码中第16,17行实现此功能。

以上就是Java处理字符串搜索嵌套结构的方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Java处理字符串搜索嵌套结构的方法是什么

本文链接: https://lsjlt.com/news/288592.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java处理字符串搜索嵌套结构的方法是什么
    本篇文章给大家分享的是有关Java处理字符串搜索嵌套结构的方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在用Java分析HTML文本时,如果要取出有嵌套结构的节点之间...
    99+
    2023-06-17
  • linux全局搜索字符串的方法是什么
    在Linux中,可以使用以下命令进行全局搜索字符串:1. `grep`命令:使用`grep`命令可以在文件中搜索指定的字符串。语法如...
    99+
    2023-10-08
    linux
  • C语言结构体嵌套定义的方法是什么
    在C语言中,可以通过在结构体中嵌套其他结构体来定义一个结构体的成员。具体的方法如下:1. 首先定义一个结构体类型,可以包含多个成员,...
    99+
    2023-08-15
    C语言
  • java元组嵌套的方法是什么
    在Java中,可以使用List或者Map来模拟元组嵌套的结构。具体的方法如下: 使用List: List<Object&g...
    99+
    2024-03-04
    java
  • PHP字符串mbstring处理中文字符串的具体方法是什么
    这篇文章给大家介绍PHP字符串mbstring处理中文字符串的具体方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。大家通过对PHP的学习,可以运用这一高级语言创建一个性能较高的网站。对于初学者来说,对于PHP字...
    99+
    2023-06-17
  • java条件运算符嵌套使用的方法是什么
    在Java中,可以使用条件运算符(三元运算符)嵌套来实现多个条件的判断。嵌套条件运算符的语法如下:```condition1 va...
    99+
    2023-10-12
    java
  • java字符串赋值的方法是什么
    在Java中,有多种方法可以赋值给字符串变量:1. 使用双引号赋值:可以直接使用双引号将字符串赋值给变量,例如:`String st...
    99+
    2023-10-07
    java
  • java字符串反转的方法是什么
    Java中字符串反转的方法有以下几种: 使用 StringBuilder 或 StringBuffer 的 reverse...
    99+
    2023-10-23
    java
  • JavaScript字符串分割处理的方法总结
    目录1、slice(start, end)2、substr(start, length)3、substring(start, stop)4、split(separ...
    99+
    2024-04-02
  • Java语言中字符的处理方法是什么
    这篇文章主要介绍“Java语言中字符的处理方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java语言中字符的处理方法是什么”文章能帮助大家解决问题。----Java是一种编程语言、一个运行...
    99+
    2023-06-03
  • java将字符串转码的方法是什么
    在Java中,可以使用String类的getBytes方法将字符串转码为字节数组。该方法有多个重载形式,可以指定要使用的字符编码。例...
    99+
    2023-09-23
    java
  • java中截取字符串方法是什么
    在Java中,可以使用substring()方法来截取字符串。该方法有两种重载形式: substring(in...
    99+
    2024-04-02
  • python中的字符转运算符、字符串处理方式是什么
    今天小编给大家分享一下python中的字符转运算符、字符串处理方式是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。字符转...
    99+
    2023-07-02
  • java判断字符串是否为数字的方法是什么
    Java 判断字符串是否为数字的方法有以下几种:1、使用正则表达式可以使用正则表达式判断字符串是否为数字。例如,使用 \d+ 匹配一...
    99+
    2023-05-13
    java判断字符串 java
  • java特殊字符转义处理的方法是什么
    在Java中,可以使用反斜杠(\)来转义特殊字符。以下是一些常见的特殊字符转义序列:- \n:换行- \t:制表符- \r:回车- ...
    99+
    2023-08-11
    java
  • java防止字符串转义的方法是什么
    在Java中,可以使用以下方法来防止字符串转义: 使用双反斜杠(\)来表示一个单斜杠(\)。例如,要表示字符串 "C:\Prog...
    99+
    2023-10-26
    java
  • java判断包含字符串的方法是什么
    Java中判断是否包含某个字符串的方法可以通过使用String类中的contains()方法来实现。contains()方法会返回一...
    99+
    2024-03-01
    java
  • java字节数组转成字符串的方法是什么
    Java中将字节数组转换成字符串的方法有两种:1. 使用String的构造函数:可以使用String的构造函数将字节数组转换成字符串...
    99+
    2023-09-15
    java
  • java字符串数组初始化的方法是什么
    Java中字符串数组的初始化有多种方法,以下是其中几种常见的方式:1. 使用大括号直接初始化数组元素:javaString[] ar...
    99+
    2023-10-18
    java
  • golang字符串转数字的方法是什么
    在Go语言中,可以使用strconv包中的函数来实现字符串到数字的转换。strconv包提供了以下几个函数来将字符串转换为数字:- ...
    99+
    2023-10-09
    golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作