From 635983691e771e5e2cb8c1a25e660e09a67d52b3 Mon Sep 17 00:00:00 2001 From: Volker Gronau Date: Thu, 20 Nov 2025 13:38:55 +0100 Subject: [PATCH 1/2] Simpler, smaller and faster implementation of String.replace --- .../com/google/gwt/emul/java/lang/String.java | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/user/super/com/google/gwt/emul/java/lang/String.java b/user/super/com/google/gwt/emul/java/lang/String.java index 67b1cff110..ba58ed0693 100644 --- a/user/super/com/google/gwt/emul/java/lang/String.java +++ b/user/super/com/google/gwt/emul/java/lang/String.java @@ -551,31 +551,16 @@ public boolean regionMatches(int toffset, String other, int ooffset, int len) { } public String replace(char from, char to) { - // Translate 'from' into unicode escape sequence (\\u and a four-digit hexadecimal number). - // Escape sequence replacement is used instead of a string literal replacement - // in order to escape regexp special characters (e.g. '.'). - String hex = Integer.toHexString(from); - String regex = "\\u" + "0000".substring(hex.length()) + hex; - String replace = NativeString.fromCharCode(to); - return nativeReplaceAll(regex, replace); + return replace(String.valueOf(from), String.valueOf(to)); } public String replace(CharSequence from, CharSequence to) { - // Implementation note: This uses a regex replacement instead of - // a string literal replacement because Safari does not - // follow the spec for "$$" in the replacement string: it - // will insert a literal "$$". IE and Firefox, meanwhile, - // treat "$$" as "$". - - // Escape regex special characters from literal replacement string. - String regex = - from.toString().replaceAll("([/\\\\\\.\\*\\+\\?\\|\\(\\)\\[\\]\\{\\}$^])", "\\\\$1"); - // Escape $ since it is for match backrefs and \ since it is used to escape - // $. - String replacement = to.toString().replaceAll("\\\\", "\\\\\\\\").replaceAll("\\$", "\\\\$"); - - return replaceAll(regex, replacement); + return replace(from.toString(), to.toString()); } + + public native String replace(String from, String to) /*-{ + return this.replaceAll(from, function() {return to}); + }-*/; /** * Regular expressions vary from the standard implementation. The From d4cf915b754cd3a83ba9fa4407f7a54753e532b9 Mon Sep 17 00:00:00 2001 From: Volker Gronau Date: Thu, 20 Nov 2025 15:21:14 +0100 Subject: [PATCH 2/2] removed lone tab --- user/super/com/google/gwt/emul/java/lang/String.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/super/com/google/gwt/emul/java/lang/String.java b/user/super/com/google/gwt/emul/java/lang/String.java index ba58ed0693..1134fa825b 100644 --- a/user/super/com/google/gwt/emul/java/lang/String.java +++ b/user/super/com/google/gwt/emul/java/lang/String.java @@ -557,7 +557,7 @@ public String replace(char from, char to) { public String replace(CharSequence from, CharSequence to) { return replace(from.toString(), to.toString()); } - + public native String replace(String from, String to) /*-{ return this.replaceAll(from, function() {return to}); }-*/;