亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java處理字符串搜索嵌套結構的方法是什么

發布時間:2021-10-29 10:19:52 來源:億速云 閱讀:121 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關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;      }        }

從字符串中獲取節點之間內容的函數如下:

       /**   * 獲取字符串之間的內容,如果包含嵌套,則返回最外層嵌套內容   *    * @param data         * @param stag      起始節點串   * @param etag      結束節點串   * @return   */ 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處理字符串搜索嵌套結構的方法是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克苏市| 新乡市| 水城县| 阿巴嘎旗| 江山市| 娄底市| 新宁县| 江门市| 增城市| 沂源县| 绥芬河市| 淄博市| 尤溪县| 扎赉特旗| 民乐县| 增城市| 黑河市| 汉阴县| 连州市| 九台市| 奇台县| 京山县| 根河市| 武威市| 孟津县| 竹北市| 临澧县| 娱乐| 沂南县| 永昌县| 嘉禾县| 桃园县| 巩义市| 元谋县| 同江市| 田阳县| 北川| 龙井市| 德昌县| 滦南县| 明光市|