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
class A {
void doSomething(String msg) {
System.debug('string literal'); // Noncompliant - 'string literal' is duplicated 3 times
System.assertEquals(msg, 'string literal');
msg = 'string literal';
}
void doSomethingElse(String msg) {
System.debug('a'); // Compliant - literal 'a' has less than 5 characters and is excluded
System.assertEquals(msg, 'a');
msg = 'a';
}
}
Compliant Solution
class A {
static final String STRING_CONST = 'string literal';
void doSomething(String msg) {
System.debug(STRING_CONST); // Compliant
System.assertEquals(msg, STRING_CONST);
msg = STRING_CONST;
}
}
Exceptions
To prevent generating some false-positives, literals having 5 or less characters are excluded as well as literals containing only letters, digits
and '_'.