...
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" |
...