首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 移除 HTML 標籤工具類:HTMLServices 完整實作解析

     編輯:Java 相關知識

前言

在處理網頁爬蟲、內容過濾或 XSS 防護時,常需從字串中移除 HTML 標籤。本文介紹一個功能完整的 HTMLServices 工具類,提供多種重載方法支援:純標籤移除、空白字元清理、長度截斷、CSS 樣式解析等進階功能。

核心功能:移除 HTML 標籤

使用正則表達式 (?is)<(.*?)> 進行不區分大小寫、單行模式的全域替換:

/**
 * 移除字串中的所有 HTML 標籤
 * @param args 待處理字串
 * @return 移除標籤後的純文字內容
 */
public static String clearHTMLToString(String args) {
    return clearHTMLToString(args, false);
}

/**
 * 移除 HTML 標籤,可選是否清理空白字元
 * @param args 待處理字串
 * @param replaceNull true=移除空白/換行/製表符
 * @return 處理後字串
 */
public static String clearHTMLToString(String args, boolean replaceNull) {
    if (StringUtils.isEmpty(args)) {
        return "";
    }
    // (?i) 不區分大小寫,(?s) 讓 . 匹配換行符
    args = args.replaceAll("(?is)<(.*?)>", "");
    if (replaceNull) {
        args = args.replaceAll("\\s*|\\t|\\r|\\n", "");
    }
    return args;
}

進階功能:長度限制與尾碼補充

支援移除標籤後指定最大長度,超出時自動截斷並加上替代字串(如「...」):

/**
 * 移除 HTML 標籤並限制最大長度
 * @param args 待處理字串
 * @param maxSize 最大長度
 * @return 處理後字串
 */
public static String clearHTMLToString(String args, int maxSize) {
    return clearHTMLToString(args, maxSize, "");
}

/**
 * 移除 HTML 標籤並限制最大長度,支援自訂替代字串
 * @param args 待處理字串
 * @param maxSize 最大長度
 * @param replace 超出長度時的替代字串(如 "...")
 * @return 處理後字串
 */
public static String clearHTMLToString(String args, int maxSize, String replace) {
    args = clearHTMLToString(args);
    if (maxSize <= 0 || args.length() <= maxSize) {
        return args;
    }
    return args.substring(0, maxSize).concat(replace);
}

CSS 樣式解析工具

類別還內建 CSS 樣式字串與 Map 互轉功能,方便處理內聯樣式:

/**
 * 將 CSS 樣式字串轉為 Map<屬性, 值>
 * 例: "font-size:12px;color:red;" → {font-size=12px, color=red}
 */
public static Map<String, String> cssToMap(String style) {
    Map<String, String> map = new HashMap<>();
    if (style == null || StringUtils.isEmpty(style)) {
        return map;
    }
    style = style.toLowerCase().split("\\}")[0]; // 取第一個規則塊
    String[] pairs = style.split(";");
    for (String pair : pairs) {
        String[] kv = pair.split(":");
        if (kv.length == 2) {
            map.put(kv[0].replace(" ", "").trim(), kv[1].trim());
        }
    }
    return map;
}

/**
 * 從樣式字串取得指定屬性值
 */
protected static String getStyleToString(String style, String styleName) {
    try {
        Map<String, String> css = cssToMap(style);
        return css.get(styleName);
    } catch (Exception e) {
        log.error(e);
    }
    return "";
}

/**
 * 將 Map 轉回 CSS 字串
 */
public static String mapToCSS(Map<String, String> css) {
    StringBuilder style = new StringBuilder();
    for (Map.Entry<String, String> entry : css.entrySet()) {
        if (style.length() > 0) style.append(",");
        style.append(entry.getKey()).append(":").append(entry.getValue());
    }
    return style.toString();
}

輔助工具方法

/** 批次移除指定字元 */
public static String filterChare(String msg, String... chars) {
    for (String ch : chars) {
        msg = msg.replace(ch, "");
    }
    return msg;
}

/** 純字串截取(不處理 HTML),支援替代字串 */
public static String clearHTMLToSize(String args, int maxSize, String replace) {
    if (args.length() <= maxSize) return args;
    return args.substring(0, maxSize).concat(replace);
}

使用範例

String html = "<div class='box'><p>Hello <b>World</b>!</p></div>";

// 基本移除標籤
String plain = HTMLServices.clearHTMLToString(html); 
// 結果: "Hello World!"

// 移除標籤 + 清理空白
String compact = HTMLServices.clearHTMLToString(html, true);
// 結果: "HelloWorld!"

// 移除標籤 + 限制 10 字 + 尾碼
String summary = HTMLServices.clearHTMLToString(html, 10, "...");
// 結果: "Hello Wor..."

// 解析內聯樣式
String style = "font-size:14px;color:#333;";
String fontSize = HTMLServices.getStyleToString(style, "font-size"); // "14px"

注意事項與改進建議

  • 正則效能:大量資料處理時,考慮使用 Jsoup 的 TextNode 或 Cleaner,更穩健且防 XSS。
  • 編碼問題:輸入字串確為 UTF-8 解碼後的 Java 字串,避免位元組層面殘留實體字元(如 &lt;)。
  • 巢狀標籤:正則無法完美處理巢狀/跨行標籤,複雜 HTML 建議改用 Jsoup Jsoup.parse(html).text()。
  • CSS 解析限制:目前 cssToMap 僅支援簡單單行樣式,不支援媒體查詢、偽類、多選擇器等完整 CSS 語法。

總結

HTMLServices 提供輕量、零依賴(僅需 Commons Lang3/Logging)的 HTML 文字提取與樣式處理能力,適合簡單的內容清洗、摘要產生、樣式屬性讀取等場景。對於複雜或非受信任 HTML,建議搭配 Jsoup 使用以確保安全與正確性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved