java 对html标签 读取值 增删改 对应的值,对应的标签名称

运行结果:

 

package base;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ZYJ {

 /**
  * @param args
  */
 public static void main(String[] args) {
  String htmlStr = "<img class=\"articleImg\" nodes=\"%5B%5D\" src=\"http://img.jcbzw315.com/upload/user/space/32777/2016/04/30/59cfbcc5-2888-49a6-91fe-37529d1d819b.jpg\" style=\"\">";
  System.out.println("开始:" + htmlStr);
  htmlStr = ZYJ.changeHtmlTag(htmlStr, "img", "src", "data-original", "\"");
  htmlStr = ZYJ.updateAllHtmlTag(htmlStr, "img", "src", "/assets/images/pub/loading_bg.gif", "\"");
  System.out.println("最终:  " + ZYJ.updateHtmlTag(htmlStr, "img", "class", "", " lazy\""));
 }

 /**
  * @param htmlStr
  *            html文本
  * @param searchTag
  *            要修改的目标标签
  * @param searchAttrib
  *            目标标签中的属性
  * @param newStr
  *            修改值 保留原本
  */
 public static String updateHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
  String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
  String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
  Pattern patternForTag = Pattern.compile(regxpForTag);
  Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
  Matcher matcherForTag = patternForTag.matcher(htmlStr);
  StringBuffer sb = new StringBuffer();
  boolean result = matcherForTag.find();
  while (result) {
   StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
   // System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
   Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));

   if (matcherForAttrib.find()) {
    // System.out.println("原本的matcherForAttrib:" +
    // matcherForAttrib.group(1));
    matcherForAttrib.appendReplacement(sbreplace, searchAttrib + "=\"" + startStr + matcherForAttrib.group(1) + endStr);
   }
   matcherForAttrib.appendTail(sbreplace);
   matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
   result = matcherForTag.find();
  }
  matcherForTag.appendTail(sb);
  return sb.toString();
 }

 /**
  * @param htmlStr
  *            html文本
  * @param searchTag
  *            要修改的目标标签
  * @param searchAttrib
  *            目标标签中的属性
  * @param newStr
  *            修改值 不保留原本
  */
 public static String updateAllHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
  String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
  String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
  Pattern patternForTag = Pattern.compile(regxpForTag);
  Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
  Matcher matcherForTag = patternForTag.matcher(htmlStr);
  StringBuffer sb = new StringBuffer();
  boolean result = matcherForTag.find();
  while (result) {
   StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
   // System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
   Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));

   if (matcherForAttrib.find()) {
    // System.out.println("原本的matcherForAttrib:" +
    // matcherForAttrib.group(1));
    matcherForAttrib.appendReplacement(sbreplace, searchAttrib + "=\"" + startStr + endStr);
   }
   matcherForAttrib.appendTail(sbreplace);
   matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
   result = matcherForTag.find();
  }
  matcherForTag.appendTail(sb);
  return sb.toString();
 }

 /**
  * @param htmlStr
  *            html文本
  * @param searchTag
  *            要修改的目标标签
  * @param searchAttrib
  *            目标标签中的属性
  * @param newStr
  *            修改值 不保留原本
  */
 public static String changeHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
  String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
  String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
  Pattern patternForTag = Pattern.compile(regxpForTag);
  Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
  Matcher matcherForTag = patternForTag.matcher(htmlStr);
  StringBuffer sb = new StringBuffer();
  boolean result = matcherForTag.find();
  while (result) {
   StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
   // System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
   Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));

   if (matcherForAttrib.find()) {
    // System.out.println("原本的matcherForAttrib:" +
    // matcherForAttrib.group(1));
    matcherForAttrib.appendReplacement(sbreplace, startStr + "=\"" + matcherForAttrib.group(1) + "\" " + searchAttrib + "=\"" + matcherForAttrib.group(1) + "\" ");
   }
   matcherForAttrib.appendTail(sbreplace);
   matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
   result = matcherForTag.find();
  }
  matcherForTag.appendTail(sb);
  return sb.toString();
 }

 /**
  * @param htmlStr
  *            html文本
  * @param searchTag
  *            要修改的目标标签
  * @param searchAttrib
  *            目标标签中的属性
  * @param newStr
  *            修改值 不保留原本 判断是否存在标签 不存在 直接 新增进去
  */
 public static String JudgeChangeHtmlTag(String htmlStr, String searchTag, String searchAttrib, String startStr, String endStr) {
  String regxpForTag = "<\\s*" + searchTag + "\\s+([^>]*)\\s*>";
  String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']([^\"|']+)[\"|']";// "=[\"|']http://([^[\"|']]+)[\"|']";
  Pattern patternForTag = Pattern.compile(regxpForTag);
  Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
  Matcher matcherForTag = patternForTag.matcher(htmlStr);
  StringBuffer sb = new StringBuffer();
  boolean result = matcherForTag.find();
  while (result) {
   StringBuffer sbreplace = new StringBuffer("<" + searchTag + " ");
   // System.out.println("原本的matcherForTag:" + matcherForTag.group(1));
   Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag.group(1));

   if (matcherForAttrib.find()) {
    // System.out.println("原本的matcherForAttrib:" +
    // matcherForAttrib.group(1));
    matcherForAttrib.appendReplacement(sbreplace, startStr + "=\"" + matcherForAttrib.group(1) + "\" " + searchAttrib + "=\"" + matcherForAttrib.group(1) + "\" ");
   }
   matcherForAttrib.appendTail(sbreplace);
   matcherForTag.appendReplacement(sb, sbreplace.toString() + ">");
   result = matcherForTag.find();
  }
  matcherForTag.appendTail(sb);
  return sb.toString();
 }
}

转载于:https://my.oschina.net/u/1052192/blog/669824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值