我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

例如要从

<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处理字符串搜索嵌套结构的方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

linux全局搜索字符串的方法是什么

在Linux中,可以使用以下命令进行全局搜索字符串:1. `grep`命令:使用`grep`命令可以在文件中搜索指定的字符串。语法如下:```grep "字符串" 文件名```例如,要在文件`file.txt`中搜索字符串`hello`,可
2023-10-08

C语言结构体嵌套定义的方法是什么

在C语言中,可以通过在结构体中嵌套其他结构体来定义一个结构体的成员。具体的方法如下:1. 首先定义一个结构体类型,可以包含多个成员,其中某些成员可以是其他结构体类型。```cstruct struct_name {member1_type
2023-08-15

java条件运算符嵌套使用的方法是什么

在Java中,可以使用条件运算符(三元运算符)嵌套来实现多个条件的判断。嵌套条件运算符的语法如下:```condition1 ? value1 : (condition2 ? value2 : value3)```这个表达式的含义是,如果c
2023-10-12

PHP字符串mbstring处理中文字符串的具体方法是什么

这篇文章给大家介绍PHP字符串mbstring处理中文字符串的具体方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。大家通过对PHP的学习,可以运用这一高级语言创建一个性能较高的网站。对于初学者来说,对于PHP字
2023-06-17

java字符串反转的方法是什么

Java中字符串反转的方法有以下几种:使用 StringBuilder 或 StringBuffer 的 reverse() 方法:这两个类都提供了 reverse() 方法,可以将字符串反转。String str = "Hello Wor
2023-10-23

java字符串赋值的方法是什么

在Java中,有多种方法可以赋值给字符串变量:1. 使用双引号赋值:可以直接使用双引号将字符串赋值给变量,例如:`String str = "Hello, World!";`2. 使用构造函数赋值:可以使用String类的构造函数将字符串赋
2023-10-07

java将字符串转码的方法是什么

在Java中,可以使用String类的getBytes方法将字符串转码为字节数组。该方法有多个重载形式,可以指定要使用的字符编码。例如,使用UTF-8编码将字符串转码为字节数组的示例代码如下:```javaString str = "你好"
2023-09-23

Java语言中字符的处理方法是什么

这篇文章主要介绍“Java语言中字符的处理方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java语言中字符的处理方法是什么”文章能帮助大家解决问题。----Java是一种编程语言、一个运行
2023-06-03

python中的字符转运算符、字符串处理方式是什么

今天小编给大家分享一下python中的字符转运算符、字符串处理方式是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。字符转
2023-07-02

java判断字符串是否为数字的方法是什么

Java 判断字符串是否为数字的方法有以下几种:1、使用正则表达式可以使用正则表达式判断字符串是否为数字。例如,使用 \d+ 匹配一个或多个数字,示例代码如下:public static boolean isNumeric(String s
2023-05-13

java防止字符串转义的方法是什么

在Java中,可以使用以下方法来防止字符串转义:使用双反斜杠(\)来表示一个单斜杠(\)。例如,要表示字符串 "C:\Program Files",可以使用 "C:\Program Files"。使用原始字符串(Raw String)来表示
2023-10-26

java特殊字符转义处理的方法是什么

在Java中,可以使用反斜杠(\)来转义特殊字符。以下是一些常见的特殊字符转义序列:- \n:换行- \t:制表符- \r:回车- \b:退格- \f:换页- \’:单引号- \”:双引号- \\:反斜杠例如,要在字符串中插入一个换行符,可
2023-08-11

java字节数组转成字符串的方法是什么

Java中将字节数组转换成字符串的方法有两种:1. 使用String的构造函数:可以使用String的构造函数将字节数组转换成字符串,构造函数的形式为new String(byte[] bytes)。例如:```javabyte[] byt
2023-09-15

java判断包含字符串的方法是什么

Java中判断是否包含某个字符串的方法可以通过使用String类中的contains()方法来实现。contains()方法会返回一个boolean值,表示字符串中是否包含指定的子字符串。例如:String str = "Hello,
java判断包含字符串的方法是什么
2024-03-01

java字符串数组初始化的方法是什么

Java中字符串数组的初始化有多种方法,以下是其中几种常见的方式:1. 使用大括号直接初始化数组元素:javaString[] array = {"Hello", "World"};2. 使用new关键字初始化数组,并为每个元素赋值:jav
2023-10-18

java字符串格式化成日期的方法是什么

Java中可以使用SimpleDateFormat类来格式化字符串为日期。示例代码如下:import java.text.SimpleDateFormat;import java.util.Date;public class Main
2023-10-23

java正则表达式匹配字符串的方法是什么

在Java中,我们可以使用正则表达式来匹配字符串,可以使用以下步骤实现:1. 导入`java.util.regex`包,该包包含了用于操作正则表达式的类。2. 使用`Pattern.compile()`方法创建一个正则表达式的模式对象。例如
2023-08-09

java多个字符串合并成一个的方法是什么

Java中可以使用字符串的concat()方法或者使用"+"运算符来合并多个字符串。使用concat()方法:```javaString str1 = "Hello";String str2 = "World";String result
2023-09-25

linux终端对特殊字符的处理方法是什么

在Linux终端中,特殊字符通常由转义字符来进行处理。转义字符是以反斜杠(\)开头的字符,用于表示特殊含义的字符。以下是常见的特殊字符与对应的转义序列:1. 换行符:\n2. 回车符:\r3. 制表符:\t4. 倒退符:\b5. 反斜杠:\
2023-09-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录