LeetCode 1410. HTML 实体解析器

本文介绍了如何实现一个HTML实体解析器,通过两种方法处理输入字符串中的特殊字符实体,如&、、、>、<和/,最终返回解析后的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode 1410. HTML 实体解析器

描述

「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。

HTML 里这些特殊字符和它们对应的字符实体包括:

  • 双引号:字符实体为 " ,对应的字符是 " 。
  • 单引号:字符实体为 ’ ,对应的字符是 ’ 。
  • 与符号:字符实体为 & ,对应对的字符是 & 。
  • 大于号:字符实体为 > ,对应的字符是 > 。
  • 小于号:字符实体为 < ,对应的字符是 < 。
  • 斜线号:字符实体为 ⁄ ,对应的字符是 / 。

给你输入字符串 text ,请你实现一个 HTML 实体解析器,返回解析器解析后的结果。

示例 1:

输入:text = “& is an HTML entity but &ambassador; is not.”
输出:“& is an HTML entity but &ambassador; is not.”

解释:解析器把字符实体 & 用 & 替换

提示:

1 <= text.length <= 10^5
字符串可能包含 256 个ASCII 字符中的任意字符。

题解

  • 方法1
class Solution {
    public String entityParser(String text) {
        // 哈希存储 替换的字符串
        HashMap <String,String> map = new HashMap<>(){
            {
                put("&quot;","\"");
                put("&apos;","'");
                put("&amp;","&");
                put("&gt;",">");
                put("&lt;","<");
                put("&frasl;","/");
            }
        };
        // 长度
        int n = text.length();
        // 存储结果
        StringBuilder sb = new StringBuilder();
        // 进行替换
        for(int i = 0;i<n;){
            // 找到 &
            if( text.charAt(i) == '&' ){
                int j = i+1;
                while( j<n && j-i<6 && text.charAt(j) != ';'  ){
                    j++;
                }
                String str1 = text.substring( i,Math.min(j+1,n) );
                // 判断是否需要替换
                if( map.containsKey(str1) ){
                    sb.append( map.get(str1) );
                    i = j+1;
                    continue; 
                } 
            }
            sb.append(text.charAt(i++));
        }
        // 返回结果
        return sb.toString();
    }
}

  • 方法2
class Solution {
    public String entityParser(String text) {
        String s = text.replaceAll("&quot;", "\"");
        String s1 = s.replaceAll("&apos;", "\'");
        String s2 = s1.replaceAll("&gt;", ">");
        String s3 = s2.replaceAll("&lt;", "<");
        String s4 = s3.replaceAll("&frasl;", "/");
        String s5 = s4.replaceAll("&amp;", "&");
        return s5;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值