...
In general, for a particular escape character of the form \X
, the equivalent Java representation is
Code Block |
---|
\\X |
Noncompliant Code Example (String Literal)
This noncompliant code example defines a method, splitWords()
, that finds matches between the string literal (WORDS
) and the input sequence. It is expected that WORDS
would hold the escape sequence for matching a word boundary. However, the Java compiler treats the "\b"
literal as a Java escape sequence, and the string WORDS
silently compiles to a backspace character.
Code Block | ||
---|---|---|
| ||
public class Splitter { private final String WORDS = "\b"; // Interpreted as backspace. Fails to split on word boundaries public String[] splitWords(String input){ Pattern pattern = Pattern.compile(WORDS); String[] input_array = pattern.split(input); return input_array; } } |
Compliant Solution (String Literal)
This compliant solution shows the correctly escaped value of the string literal WORDS
that results in a regular expression designed to split on word boundaries:
Code Block | ||
---|---|---|
| ||
public class Splitter { private final String WORDS = "\\b"; // Interpreted as two chars, '\' and 'b'. Correctly splits on word boundaries public String[] split(String input){ Pattern pattern = Pattern.compile(WORDS); String[] input_array = pattern.split(input); return input_array; } } |
Noncompliant Code Example (String Property)
This noncompliant code example uses the same method, splitWords()
. This time the WORDS
string is loaded from an external properties file.
...
Code Block | ||
---|---|---|
| ||
WORDS: \b |
Compliant Solution (String Property)
This compliant solution shows the correctly escaped value of the WORDS
property:
Code Block | ||
---|---|---|
| ||
WORDS: \\b |
Applicability
Incorrect use of escape characters in string inputs can result in misinterpretation and potential corruption of data.
Bibliography
[API 2011] | Class Pattern, "Backslashes, Escapes, and Quoting" Package java.sql |
[JLS 2011] | §3.10.6, "Escape Sequences for Character and String Literals" |
...