Why is this an issue?
Looking for a given substring starting from a specified offset can be achieved by such code:
This works well, but it creates a new
String for each call to the
substring method. When this is done in a loop, a lot of
Strings are created for nothing, which can lead to performance problems if
str is large.
To avoid performance problems,
String.substring(beginIndex) should not be chained with the following methods:
For each of these methods, another method with an additional parameter is available to specify an offset.
Using these methods will avoid the creation of additional
String instances. For indexOf methods, adjust the returned value by
subtracting the substring index parameter to obtain the same result.
Noncompliant code example
str.substring(beginIndex).indexOf(char1); // Noncompliant; a new String is going to be created by "substring"
str.indexOf(char1, beginIndex) - beginIndex; // index for char1 not found is (-1-beginIndex)