# HG changeset patch # User Jaroslav Tulach # Date 1353248407 -3600 # Node ID 1d6ca19d717473448e14501ccd19a9c8cd0374e1 # Parent e75412365c872e2dc88b8675212d4ba31a0d66b3 Replace multiple occurences of the same character diff -r e75412365c87 -r 1d6ca19d7174 emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Sun Nov 18 14:39:55 2012 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Sun Nov 18 15:20:07 2012 +0100 @@ -1396,7 +1396,16 @@ } function java_lang_String_replaceLjava_lang_StringCC(arg0,arg1,arg2) { - return arg0.toString().replace(arg1, arg2); + if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1); + if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2); + var s = arg0.toString(); + for (;;) { + var ret = s.replace(arg1, arg2); + if (ret === s) { + return ret; + } + s = ret; + } } function java_lang_String_containsZLjava_lang_CharSequence(arg0,arg1) { return arg0.toString().indexOf(arg1.toString()) >= 0; diff -r e75412365c87 -r 1d6ca19d7174 vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Sun Nov 18 14:39:55 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringSample.java Sun Nov 18 15:20:07 2012 +0100 @@ -56,6 +56,10 @@ return ("" + a + b +c).toString(); } + public static String replace(String s, char a, char b) { + return s.replace(a, b); + } + public static String toStringTest(int howMuch) { counter = 0; StringSample ss = null; diff -r e75412365c87 -r 1d6ca19d7174 vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Sun Nov 18 14:39:55 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StringTest.java Sun Nov 18 15:20:07 2012 +0100 @@ -94,6 +94,20 @@ true, 0, 5 ); } + @Test public void replaceChars() throws Exception { + assertExec( + "Can replace slashes by underscores", + "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC", + "x_y_z", "x/y/z", '/', '_' + ); + } + @Test public void replaceIntChars() throws Exception { + assertExec( + "Can replace slashes by underscores", + "org_apidesign_vm4brwsr_StringSample_replaceLjava_lang_StringLjava_lang_StringCC", + "x_y_z", "x/y/z", (int)'/', (int)'_' + ); + } private static CharSequence codeSeq; private static Invocable code;