I agree with the others the code is more readable.

There is a slightly difference between the current behavior and the behavior of the proposed code,
  "foo".replace("bar", null)
should throw a NPE because replacement is null but the proposed code will return "foo" because replacement.toString() is called after the short-circuit test (j < 0).

so the first part of the code should be:
  String starget = target.toString();  // implict nullcheck
  String srepl = replacement.toString();  // implicit nullcheck
  int j = indexOf(starget);
  if (j < 0) {
    return this;
  }
  ...

also 'i' can be initialized just before the 'do', there is no point to initialize it before.

To finish, the two 'final' are useless here but i suppose it's a matter of style :)

cheers,
Rémi


On 05/31/2015 04:19 AM, Ivan Gerasimov wrote:
Hi everyone!

Here's another webrev, in which replace() is implemented with StringBuilder. On my benchmark it is almost as fast as the version backed with arrays, but this variant is much shorter.

Credits to Sherman for combining the general algorithm with the case of empty target.

Comments, further suggestions are welcome!

BUGURL: https://bugs.openjdk.java.net/browse/JDK-8058779
WEBREV: http://cr.openjdk.java.net/~igerasim/8058779/04/webrev/

Sincerely yours,
Ivan


Reply via email to