Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

Noncompliant Code Example

With the default threshold of 3:

public def run() {
  prepare("action random1")    // Noncompliant - "action random1" is duplicated 3 times
  execute("action random1")
  release("action random1")
}

Compliant Solution

public def run() {
  val action = "action random1"
  prepare(action)
  execute(action)
  release(action)
}

Exceptions

To prevent generating some false-positives, literals having 5 or less characters are excluded as well as literals containing only letters, digits and '_'.