Java String Escaping and Text Blocks

Guide to Java string escaping covering character escape sequences, Unicode escapes, text blocks (Java 13+), and the differences between char literals and String literals. Includes StringEscapeUtils alternatives.

Language-Specific

Detailed Explanation

Java String Escaping

Java strings are always double-quoted, and the language enforces strict rules about which escape sequences are valid. Unlike some languages, Java does not silently pass through unrecognized escapes — using an invalid sequence is a compile error.

Valid Escape Sequences

\\"   → double quote
\\'   → single quote (mainly for char literals)
\\\\   → backslash
\\n   → newline (LF)
\\r   → carriage return (CR)
\\t   → tab
\\b   → backspace
\\f   → form feed
\\uXXXX → Unicode character (exactly 4 hex digits)
\\OOO  → octal character (1-3 octal digits, max \\377)

Unicode Escapes Are Special

Java processes \\uXXXX at the lexer level, before parsing. This means Unicode escapes work even outside strings:

// These are identical:
String s = "Hello";
String s = "\u0048\u0065\u006C\u006C\u006F";

This also means \\u000A (newline) inside a string literal causes a compile error because the lexer inserts an actual newline into the source.

Text Blocks (Java 13+)

Text blocks use triple double quotes and preserve multiline formatting:

String json = """
        {
            "name": "O'Brien",
            "value": 42
        }
        """;

Inside text blocks, double quotes do not need escaping (unless three appear consecutively). The trailing whitespace and indentation are managed by the stripIndent() method applied automatically.

Char Literals vs. String Literals

Char literals use single quotes and require escaping single quotes: '\\''. String literals use double quotes and require escaping double quotes: "\\"". Both share the same backslash escape sequences.

Common Patterns

  • Regex in Java: Every backslash in the regex needs to be doubled in the string: "\\\\d+" matches one or more digits.
  • File paths: Use java.nio.file.Path or forward slashes instead of double-escaping backslashes.
  • Properties files: Use the Properties class rather than manual escaping of keys and values.

Apache Commons StringEscapeUtils

For programmatic escaping, Apache Commons Text provides StringEscapeUtils with methods like escapeJava(), escapeHtml4(), escapeXml10(), and others.

Use Case

Java string escaping is critical for constructing SQL queries (use PreparedStatement), building regex patterns, generating XML and JSON content, processing file paths across platforms, creating log messages with special characters, and handling internationalized text with Unicode escape sequences in older codebases.

Try It — String Escape/Unescape

Open full tool