All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1401_1500.s1410_html_entity_parser.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1401_1500.s1410_html_entity_parser;

// #Medium #String #Hash_Table #2022_03_27_Time_19_ms_(98.92%)_Space_42.6_MB_(100.00%)

import java.util.HashMap;
import java.util.Map;

/**
 * 1410 - HTML Entity Parser\.
 *
 * Medium
 *
 * **HTML entity parser** is the parser that takes HTML code as input and replace all the entities of the special characters by the characters itself.
 *
 * The special characters and their entities for HTML are:
 *
 * *   **Quotation Mark:** the entity is `"` and symbol character is `"`.
 * *   **Single Quote Mark:** the entity is `'` and symbol character is `'`.
 * *   **Ampersand:** the entity is `&` and symbol character is `&`.
 * *   **Greater Than Sign:** the entity is `>` and symbol character is `>`.
 * *   **Less Than Sign:** the entity is `&lt;` and symbol character is `<`.
 * *   **Slash:** the entity is `&frasl;` and symbol character is `/`.
 *
 * Given the input `text` string to the HTML parser, you have to implement the entity parser.
 *
 * Return _the text after replacing the entities by the special characters_.
 *
 * **Example 1:**
 *
 * **Input:** text = "&amp; is an HTML entity but &ambassador; is not."
 *
 * **Output:** "& is an HTML entity but &ambassador; is not."
 *
 * **Explanation:** The parser will replace the &amp; entity by &
 *
 * **Example 2:**
 *
 * **Input:** text = "and I quote: &quot;...&quot;"
 *
 * **Output:** "and I quote: \\"...\\""
 *
 * **Constraints:**
 *
 * *   1 <= text.length <= 105
 * *   The string may contain any possible characters out of all the 256 ASCII characters.
**/
public class Solution {
    public String entityParser(String text) {
        Map map = new HashMap<>();
        map.put(""", "\"");
        map.put("'", "'");
        map.put("&", "&");
        map.put(">", ">");
        map.put("<", "<");
        map.put("⁄", "/");
        int n = text.length();
        StringBuilder sb = new StringBuilder();
        int i = 0;
        while (i < n) {
            char c = text.charAt(i);
            if (c == '&') {
                int index = text.indexOf(";", i);
                if (index >= 0) {
                    String pattern = text.substring(i, index + 1);
                    if (map.containsKey(pattern)) {
                        sb.append(map.get(pattern));
                        i += pattern.length();
                        continue;
                    }
                }
            }
            sb.append(c);
            i++;
        }
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy