Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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
bgColor#FFCCCC
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
bgColor#ccccff
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
bgColor#FFCCCC
WORDS: \b

Compliant Solution (String Property)

This compliant solution shows the correctly escaped value of the WORDS property:

Code Block
bgColor#ccccff
WORDS: \\b

Applicability

Incorrect use of escape characters in string inputs can result in misinterpretation and potential corruption of data.

Bibliography

...