Try it yourself with our free Html Entity Encoder tool — runs entirely in your browser, no signup needed.

How to HTML decode in Java

How to HTML Decode in Java

HTML decoding is the process of converting HTML entities into their corresponding characters. This is a crucial step when working with text data that contains HTML markup, as it ensures that the text is displayed correctly and consistently. In this guide, we will explore how to HTML decode in Java, covering the basics, common edge cases, and performance tips.

Quick Example

Here is a minimal example of how to HTML decode in Java:

import org.apache.commons.text.StringEscapeUtils;

public class HtmlDecoder {
    public static void main(String[] args) {
        String html = "<p>Hello, & world!</p>";
        String decoded = StringEscapeUtils.unescapeHtml4(html);
        System.out.println(decoded); // Output: <p>Hello, & world!</p>
    }
}

To use the StringEscapeUtils class, add the following dependency to your pom.xml file (if you're using Maven):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-text</artifactId>
    <version>1.9</version>
</dependency>

Or, if you're using Gradle, add this to your build.gradle file:

dependencies {
    implementation 'org.apache.commons:commons-text:1.9'
}

Step-by-Step Breakdown

Let's break down the code example:

  • We import the StringEscapeUtils class from the Apache Commons Text library.
  • We define a main method to test the HTML decoding functionality.
  • We define a string html containing HTML entities that need to be decoded.
  • We call the unescapeHtml4 method, passing the html string as an argument. This method decodes the HTML entities and returns the decoded string.
  • We print the decoded string to the console.

Handling Edge Cases

Here are a few common edge cases to consider when HTML decoding in Java:

Empty/Null Input

What happens when the input string is empty or null?

String html = "";
String decoded = StringEscapeUtils.unescapeHtml4(html);
System.out.println(decoded); // Output: (empty string)

String html = null;
String decoded = StringEscapeUtils.unescapeHtml4(html);
// Throws NullPointerException

To handle this case, you can add a simple null check before calling the unescapeHtml4 method:

if (html != null) {
    String decoded = StringEscapeUtils.unescapeHtml4(html);
    System.out.println(decoded);
} else {
    System.out.println("Input is null or empty");
}

Invalid Input

What happens when the input string contains invalid HTML entities?

String html = "& invalid-entity;";
String decoded = StringEscapeUtils.unescapeHtml4(html);
System.out.println(decoded); // Output: & invalid-entity;

In this case, the unescapeHtml4 method will simply ignore the invalid entity and return the original string. If you want to handle invalid entities differently, you can use a custom HTML decoding library or implement your own decoding logic.

Large Input

What happens when the input string is very large?

String html = repeat("&lt;p&gt;Hello, &amp; world!&lt;/p&gt;", 10000);
String decoded = StringEscapeUtils.unescapeHtml4(html);
System.out.println(decoded); // Output: <p>Hello, & world!</p> ( repeated 10000 times)

In this case, the unescapeHtml4 method will still work correctly, but it may take longer to process the large input string. If performance is a concern, you can consider using a more efficient HTML decoding library or implementing your own decoding logic.

Unicode/Special Characters

What happens when the input string contains Unicode or special characters?

String html = "&lt;p&gt;Hello, &#x20AC; world!&lt;/p&gt;";
String decoded = StringEscapeUtils.unescapeHtml4(html);
System.out.println(decoded); // Output: <p>Hello, € world!</p>

In this case, the unescapeHtml4 method will correctly decode the Unicode entity and return the corresponding character.

Common Mistakes

Here are a few common mistakes developers make when HTML decoding in Java:

Mistake 1: Using the Wrong Method

Using the unescapeHtml3 method instead of unescapeHtml4:

String html = "&lt;p&gt;Hello, &amp; world!&lt;/p&gt;";
String decoded = StringEscapeUtils.unescapeHtml3(html);
System.out.println(decoded); // Output: &lt;p&gt;Hello, &amp; world!&lt;/p&gt; (not decoded)

Corrected code:

String decoded = StringEscapeUtils.unescapeHtml4(html);

Mistake 2: Not Handling Null Input

Not checking for null input before calling the unescapeHtml4 method:

String html = null;
String decoded = StringEscapeUtils.unescapeHtml4(html);
// Throws NullPointerException

Corrected code:

if (html != null) {
    String decoded = StringEscapeUtils.unescapeHtml4(html);
    System.out.println(decoded);
} else {
    System.out.println("Input is null or empty");
}

Mistake 3: Not Handling Invalid Input

Not handling invalid HTML entities:

String html = "& invalid-entity;";
String decoded = StringEscapeUtils.unescapeHtml4(html);
System.out.println(decoded); // Output: & invalid-entity;

Corrected code:

if (html.contains("&")) {
    // Handle invalid entities differently
}

Performance Tips

Here are a few performance tips for HTML decoding in Java:

  • Use the unescapeHtml4 method instead of unescapeHtml3, as it is more efficient and supports more HTML entities.
  • Use a StringBuilder to concatenate decoded strings instead of using the + operator.
  • Avoid decoding large input strings in a single operation; instead, break them down into smaller chunks and decode each chunk separately.

FAQ

Q: What is the difference between unescapeHtml3 and unescapeHtml4?

A: unescapeHtml3 is an older method that only supports a limited set of HTML entities, while unescapeHtml4 is a newer method that supports a wider range of entities and is more efficient.

Q: How do I handle invalid HTML entities?

A: You can handle invalid entities by checking for them before calling the unescapeHtml4 method, or by using a custom HTML decoding library that supports error handling.

Q: Can I use this method for decoding XML entities?

A: No, this method is specifically designed for HTML decoding and may not work correctly for XML entities. Use a separate library or method for XML decoding.

Q: Is this method thread-safe?

A: Yes, the unescapeHtml4 method is thread-safe and can be used concurrently by multiple threads.

Q: Can I use this method for decoding HTML entities in a web application?

A: Yes, this method can be used for decoding HTML entities in a web application, but you may need to consider additional security measures to prevent cross-site scripting (XSS) attacks.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp