-Clazz.load (["java.lang.CharSequence", "$.Comparable", "java.io.Serializable", "java.util.Comparator"], "java.lang.String", null, function () {\r
-if (String.prototype.$replace == null) { // not defined yet! ClazzLoader may try to load this twice!\r
-java.lang.String = String;\r
-if (Clazz.supportsNativeObject) {\r
- for (var i = 0; i < Clazz.extendedObjectMethods.length; i++) {\r
- var p = Clazz.extendedObjectMethods[i];\r
- if ("to$tring" == p || "toString" == p || "equals" == p || "hashCode" == p) {\r
- continue;\r
- }\r
- String.prototype[p] = Clazz._O.prototype[p];\r
- }\r
-}\r
-//Clazz.decorateAsType (String, "String", null, [java.io.Serializable, CharSequence, Comparable]);\r
-Clazz.implementOf (String, [java.io.Serializable, CharSequence, Comparable]);\r
-//Number.equals = Clazz.innerFunctions.equals;\r
-String.getName = Clazz.innerFunctions.getName;\r
-\r
-String.serialVersionUID = String.prototype.serialVersionUID = -6849794470754667710;\r
-\r
-String.prototype.$replace = function (c1, c2) {\r
- /*\r
- var sp = "\\$.*+{}?^()[]";\r
- if (sp.indexOf (c1) != -1) {\r
- c1 = "\\" + c1;\r
- }\r
- */\r
- c1 = c1.replace (/([\\\/\$\.\*\+\{\}\?\^\(\)\[\]])/g, function ($0, $1) {\r
- return "\\" + $1;\r
- });\r
- var regExp = new RegExp (c1, "gm");\r
- return this.replace (regExp, c2);\r
-};\r
-String.prototype.$generateExpFunction = function (str) {\r
- var arr = [];\r
- var orders = [];\r
- var idx = 0;\r
- arr[0] = "";\r
- var i = 0;\r
- for (; i < str.length; i++) {\r
- var ch = str.charAt (i);\r
- if (i != str.length - 1 && ch == '\\') {\r
- i++;\r
- var c = str.charAt (i);\r
- if (c == '\\') {\r
- arr[idx] += '\\';\r
- }\r
- arr[idx] += c;\r
- } else if (i != str.length - 1 && ch == '$') {\r
- i++;\r
- orders[idx] = parseInt (str.charAt (i));\r
- idx++;\r
- arr[idx] = "";\r
- } else if (ch == '\r') {\r
- arr[idx] += "\\r";\r
- } else if (ch == '\n') {\r
- arr[idx] += "\\n";\r
- } else if (ch == '\t') {\r
- arr[idx] += "\\t";\r
- } else if (ch == '\"') {\r
- arr[idx] += "\\\"";\r
- } else {\r
- arr[idx] += ch;\r
- }\r
- }\r
- var funStr = "f = function (";\r
- var max = Math.max.apply({},orders);\r
- for (i = 0; i <= max; i++) {\r
- funStr += "$" + i;\r
- if (i != max) {\r
- funStr += ", ";\r
- }\r
- }\r
- funStr += ") { return ";\r
- for (i = 0; i < arr.length - 1; i++) {\r
- funStr += "\"" + arr[i] + "\" + $" + orders[i] + " + ";\r
- }\r
- funStr += "\"" + arr[i] + "\"; }";\r
- var f = null;\r
- eval (funStr)\r
- return f;\r
-};\r
-\r
-String.prototype.replaceAll = function (exp, str) {\r
- var regExp = new RegExp (exp, "gm");\r
- return this.replace (regExp, this.$generateExpFunction (str));\r
-};\r
-String.prototype.replaceFirst = function (exp, str) {\r
- var regExp = new RegExp (exp, "m");\r
- return this.replace (regExp, this.$generateExpFunction (str));\r
-};\r
-String.prototype.matches = function (exp) {\r
- if (exp != null) {\r
- exp = "^(" + exp + ")$";\r
- }\r
- var regExp = new RegExp (exp, "gm");\r
- var m = this.match (regExp);\r
- return m != null && m.length != 0;\r
-};\r
-String.prototype.regionMatches = function (ignoreCase, toffset,\r
- other, ooffset, len) {\r
- /*\r
- * Support different method signatures\r
- */\r
- if (typeof ignoreCase == "number"\r
- || (ignoreCase != true && ignoreCase != false)) {\r
- len = ooffset;\r
- ooffset = other;\r
- other = toffset;\r
- toffset = ignoreCase;\r
- ignoreCase = false;\r
- }\r
- var to = toffset;\r
- var po = ooffset;\r
- // Note: toffset, ooffset, or len might be near -1>>>1.\r
- if ((ooffset < 0) || (toffset < 0) || (toffset > this.length - len) ||\r
- (ooffset > other.length - len)) {\r
- return false;\r
- }\r
- var s1 = this.substring (toffset, toffset + len);\r
- var s2 = other.substring (ooffset, ooffset + len);\r
- if (ignoreCase) {\r
- s1 = s1.toLowerCase ();\r
- s2 = s2.toLowerCase ();\r
- }\r
- return s1 == s2;\r
-};\r
-String.prototype.$plit = function (regex, limit) {\r
- /*\r
- * Support different method signatures\r
- */\r
- if (limit != null && limit > 0) {\r
- if (limit == 1) {\r
- return this;\r
- }\r
- var regExp = new RegExp ("(" + regex + ")", "gm");\r
- var count = 1;\r
- var s = this.replace (regExp, function ($0, $1) {\r
- count++;\r
- if (count == limit) {\r
- return "@@_@@";\r
- } else if (count > limit) {\r
- return $0;\r
- } else {\r
- return $0;\r
- }\r
- });\r
- regExp = new RegExp (regex, "gm");\r
- var arr = this.split (regExp);\r
- if (arr.length > limit) {\r
- arr[limit - 1] = s.substring (s.indexOf ("@@_@@") + 5);\r
- arr.length = limit;\r
- }\r
- return arr;\r
- } else {\r
- var regExp = new RegExp (regex, "gm");\r
- return this.split (regExp);\r
- }\r
-};\r
-\r
-String.prototype.trim = function () {\r
- var len = this.length;\r
- var st = 0;\r
-\r
- while ((st < len) && (this.charAt (st) <= ' ')) {\r
- st++;\r
- }\r
- while ((st < len) && (this.charAt (len - 1) <= ' ')) {\r
- len--;\r
- }\r
- return ((st > 0) || (len < len)) ? this.substring (st, len) : this;\r
-};\r
-\r
-String.prototype.trim = function () {\r
- return this.replace (/^\s+/g, '').replace (/\s+$/g, '');\r
-};\r
-\r
-/* private */\r
-String.prototype.startsWith_string_number = function (prefix, toffset) {\r
- var to = toffset;\r
- var po = 0;\r
- var pc = prefix.length;\r
- // Note: toffset might be near -1>>>1.\r
- if ((toffset < 0) || (toffset > this.length - pc)) {\r
- return false;\r
- }\r
- while (--pc >= 0) {\r
- if (this.charAt (to++) != prefix.charAt (po++)) {\r
- return false;\r
- }\r
- }\r
- return true;\r
-};\r
-\r
-String.prototype.startsWith = function (prefix) { /* prefix, toffset */\r
- if (arguments.length == 1) {\r
- return this.startsWith_string_number (arguments[0], 0);\r
- } else if (arguments.length == 2) {\r
- return this.startsWith_string_number (arguments[0], arguments[1]);\r
- } else {\r
- return false;\r
- }\r
-};\r
-\r
-String.prototype.endsWith = function (suffix) {\r
- return this.startsWith (suffix, this.length - suffix.length);\r
-};\r
-\r
-String.prototype.equals = function (anObject) {\r
- return this.valueOf () == anObject;\r
-};\r
-\r
-String.prototype.equalsIgnoreCase = function (anotherString) {\r
- return (anotherString == null) ? false : (this == anotherString \r
- || this.toLowerCase () == anotherString.toLowerCase ());\r
-};\r
-\r
-/* private */\r
-String.prototype.hash = 0;\r
-\r
-String.prototype.hashCode = function () {\r
- var h = this.hash;\r
- if (h == 0) {\r
- var off = 0;\r
- var len = this.length;\r
- for (var i = 0; i < len; i++) {\r
- h = 31*h + this.charCodeAt (off++);\r
- h &= 0xffffffff;\r
- }\r
- this.hash = h;\r
- }\r
- return h;\r
-};\r
-\r
-String.prototype.getBytes = function () {\r
- if (arguments.length == 4) {\r
- return this.getChars (arguments[0], arguments[1], arguments[2], arguments[3]);\r
- }\r
- var s = this;\r
- if (arguments.length == 1) {\r
- var cs = arguments[0].toString().toLowerCase ();\r
- var charset = [\r
- "utf-8", "UTF8", "us-ascii", "iso-8859-1", "8859_1", "gb2312", "gb18030", "gbk"\r
- ];\r
- var existed = false;\r
- for (var i = 0; i < charset.length; i++) {\r
- if (charset[i] == cs) {\r
- existed = true;\r
- break;\r
- }\r
- }\r
- if (!existed) {\r
- throw new java.io.UnsupportedEncodingException ();\r
- }\r
- if (cs == "utf-8" || cs == "utf8") {\r
- s = Encoding.convert2UTF8 (this);\r
- }\r
- }\r
- var arrs = new Array (s.length);\r
- var c = 0, ii = 0;\r
- for (var i = 0; i < s.length; i++) {\r
- c = s.charCodeAt (i);\r
- if (c > 255) {\r
- arrs[ii] = 0x1a;\r
- arrs[ii + 1] = c & 0xff;\r
- arrs[ii + 2] = (c & 0xff00) >> 8;\r
- ii+=2;\r
- } else {\r
- arrs[ii] = c;\r
- }\r
- ii++;\r
- }\r
- return arrs;\r
-};\r
-\r
-String.prototype.compareTo = function (anotherString) {\r
- if (anotherString == null) {\r
- throw new java.lang.NullPointerException ();\r
- }\r
- var len1 = this.length;\r
- var len2 = anotherString.length;\r
- var n = Math.min (len1, len2);\r
- var k = 0;\r
- while (k < n) {\r
- var c1 = this.charCodeAt (k);\r
- var c2 = anotherString.charCodeAt (k);\r
- if (c1 != c2) {\r
- return c1 - c2;\r
- }\r
- k++;\r
- }\r
- return len1 - len2;\r
-};\r
-\r
-String.prototype.toCharArray = function () {\r
- var result = new Array (this.length);\r
- for (var i = 0; i < this.length; i++) {\r
- result[i] = this.charAt (i);\r
- }\r
- return result;\r
-};\r
-String.value0f = String.valueOf;\r
-String.valueOf = function (o) {\r
- if (o == "undefined") {\r
- return String.value0f ();\r
- }\r
- if (o instanceof Array) {\r
- if (arguments.length == 1) {\r
- return o.join ('');\r
- } else {\r
- var off = arguments[1];\r
- var len = arguments[2];\r
- var oo = new Array (len);\r
- for (var i = 0; i < len; i++) {\r
- oo[i] = o[off + i];\r
- }\r
- return oo.join ('');\r
- }\r
- }\r
- return "" + o;\r
-};\r
-\r
-String.prototype.subSequence = function (beginIndex, endIndex) {\r
- return this.substring(beginIndex, endIndex);\r
-};\r
-\r
-String.prototype.compareToIgnoreCase = function (str) {\r
- if (str == null) {\r
- throw new NullPointerException ();\r
- }\r
- var s1 = this.toUpperCase ();\r
- var s2 = str.toUpperCase ();\r
- if (s1 == s2) {\r
- return 0;\r
- } else {\r
- var s1 = this.toLowerCase ();\r
- var s2 = str.toLowerCase ();\r
- if (s1 == s2) {\r
- return 0;\r
- } else if (s1 > s2) {\r
- return 1;\r
- } else {\r
- return -1;\r
- }\r
- }\r
-};\r
-\r
-String.prototype.contentEquals = function (sb) {\r
- if (this.length != sb.length ()) {\r
- return false;\r
- }\r
- var v = sb.getValue ();\r
- var i = 0;\r
- var j = 0;\r
- var n = this.length;\r
- while (n-- != 0) {\r
- if (this.charCodeAt (i++) != v[j++]) {\r
- return false;\r
- }\r
- }\r
- return true;\r
-};\r
-\r
-String.prototype.getChars = function (srcBegin, srcEnd, dst, dstBegin) {\r
- if (srcBegin < 0) {\r
- throw new StringIndexOutOfBoundsException(srcBegin);\r
- }\r
- if (srcEnd > this.length) {\r
- throw new StringIndexOutOfBoundsException(srcEnd);\r
- }\r
- if (srcBegin > srcEnd) {\r
- throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);\r
- }\r
- if (dst == null) {\r
- throw new NullPointerException ();\r
- }\r
- for (var i = 0; i < srcEnd - srcBegin; i++) {\r
- dst[dstBegin + i] = this.charAt (srcBegin + i);\r
- }\r
-};\r
-String.prototype.$concat = String.prototype.concat;\r
-String.prototype.concat = function (s) {\r
- if (s == null) {\r
- throw new NullPointerException ();\r
- }\r
- return this.$concat (s);\r
-};\r
-\r
-String.prototype.$lastIndexOf = String.prototype.lastIndexOf;\r
-String.prototype.lastIndexOf = function (s, last) {\r
- if (last != null && last + this.length <= 0) { \r
- return -1;\r
- }\r
- if (last != null) {\r
- return this.$lastIndexOf (s, last);\r
- } else {\r
- return this.$lastIndexOf (s);\r
- }\r
-};\r
-\r
-String.prototype.intern = function () {\r
- return this.valueOf ();\r
-};\r
-String.copyValueOf = String.prototype.copyValueOf = function () {\r
- if (arguments.length == 1) {\r
- return String.instantialize (arguments[0]);\r
- } else {\r
- return String.instantialize (arguments[0], arguments[1], arguments[2]);\r
- }\r
-};\r
-String.indexOf = function (source, sourceOffset, sourceCount,\r
- target, targetOffset, targetCount, fromIndex) {\r
- if (fromIndex >= sourceCount) {\r
- return (targetCount == 0 ? sourceCount : -1);\r
- }\r
- if (fromIndex < 0) {\r
- fromIndex = 0;\r
- }\r
- if (targetCount == 0) {\r
- return fromIndex;\r
- }\r
-\r
- var first = target[targetOffset];\r
- var i = sourceOffset + fromIndex;\r
- var max = sourceOffset + (sourceCount - targetCount);\r
-\r
- startSearchForFirstChar:\r
- while (true) {\r
- /* Look for first character. */\r
- while (i <= max && source[i] != first) {\r
- i++;\r
- }\r
- if (i > max) {\r
- return -1;\r
- }\r
-\r
- /* Found first character, now look at the rest of v2 */\r
- var j = i + 1;\r
- var end = j + targetCount - 1;\r
- var k = targetOffset + 1;\r
- while (j < end) {\r
- if (source[j++] != target[k++]) {\r
- i++;\r
- /* Look for str's first char again. */\r
- continue startSearchForFirstChar;\r
- }\r
- }\r
- return i - sourceOffset; /* Found whole string. */\r
- }\r
-};\r
-\r
-String.instantialize = function () {\r
- if (arguments.length == 0) {\r
- return new String ();\r
- } else if (arguments.length == 1) {\r
- var x = arguments[0];\r
- if (typeof x == "string" || x instanceof String) {\r
- return new String (x);\r
- } else if (x instanceof Array || x instanceof Int32Array) {\r
- if (x.length > 0 && typeof x[0] == "number") {\r
- var arr = new Array (x.length);\r
- for (var i = 0; i < x.length; i++) {\r
- arr[i] = String.fromCharCode (x[i] & 0xff);\r
- }\r
- return Encoding.readUTF8 (arr.join (''));\r
- }\r
- return x.join ('');\r
- } else if (x.__CLASS_NAME__ == "StringBuffer" \r
- || x.__CLASS_NAME__ == "java.lang.StringBuffer") {\r
- var value = x.shareValue();\r
- var length = x.length ();\r
- var valueCopy = new Array (length);\r
- for (var i = 0; i < length; i++) {\r
- valueCopy[i] = value[i];\r
- }\r
- return valueCopy.join ('')\r
- //return x.value.join ('');\r
- } else {\r
- return "" + x;\r
- }\r
- } else if (arguments.length == 2) {\r
- var x = arguments[0];\r
- var hibyte=arguments[1];\r
- if (typeof hibyte == "string") {\r
- return String.instantialize(x,0,x.length, hibyte);\r
- } else {\r
- return String.instantialize(x,hibyte,0,x.length);\r
- }\r
- } else if (arguments.length == 3) {\r
- var bytes = arguments[0];\r
- var offset = arguments[1];\r
- var length = arguments[2];\r
- if (arguments[2] instanceof Array) {\r
- bytes = arguments[2];\r
- offset = arguments[0];\r
- length = arguments[1];\r
- }\r
- var arr = new Array (length);\r
- if (offset < 0 || length + offset > bytes.length) {\r
- throw new IndexOutOfBoundsException ();\r
- }\r
- if (length > 0) {\r
- var isChar = (bytes[offset].length != null);\r
- if (isChar) {\r
- for (var i = 0; i < length; i++) {\r
- arr[i] = bytes[offset + i];\r
- }\r
- } else {\r
- for (var i = 0; i < length; i++) {\r
- arr[i]=String.fromCharCode (bytes[offset+i]);\r
- }\r
- }\r
- }\r
- return arr.join ('');\r
- } else if (arguments.length == 4) {\r
- var bytes = arguments[0];\r
- var y = arguments[3];\r
- if (typeof y == "string" || y instanceof String) {\r
- var offset = arguments[1];\r
- var length = arguments[2];\r
- var arr = new Array (length);\r
- for (var i = 0; i < length; i++) {\r
- arr[i] = bytes[offset + i];\r
- if (typeof arr[i] == "number") {\r
- arr[i] = String.fromCharCode (arr[i] & 0xff);\r
- }\r
- }\r
- var cs = y.toLowerCase ();\r
- if (cs == "utf-8" || cs == "utf8") {\r
- return Encoding.readUTF8 (arr.join (''));\r
- } else {\r
- return arr.join ('');\r
- }\r
- } else {\r
- var count = arguments[3];\r
- var offset = arguments[2];\r
- var hibyte = arguments[1];\r
- var value = new Array (count);\r
- if (hibyte == 0) {\r
- for (var i = count ; i-- > 0 ;) {\r
- value[i] = String.fromCharCode (bytes[i + offset] & 0xff);\r
- }\r
- } else {\r
- hibyte <<= 8;\r
- for (var i = count ; i-- > 0 ;) {\r
- value[i] = String.fromCharCode (hibyte | (bytes[i + offset] & 0xff));\r
- }\r
- }\r
- return value.join ('');\r
- }\r
- } else {\r
- var s = "";\r
- for (var i = 0; i < arguments.length; i++) {\r
- s += arguments[i];\r
- }\r
- return s;\r
- }\r
-};\r
-\r
-if (navigator.userAgent.toLowerCase ().indexOf ("chrome") != -1) { // Google Chrome's bug\r
- String.prototype.toString = function () {\r
- return this;\r
- };\r
-}\r
-\r
-} // end of String.prototype.$replace\r
+Clazz.load (["java.lang.CharSequence", "$.Comparable", "java.io.Serializable", "java.util.Comparator"], "java.lang.String", null, function () {
+if (String.prototype.$replace == null) { // not defined yet! ClazzLoader may try to load this twice!
+java.lang.String = String;
+if (Clazz.supportsNativeObject) {
+ for (var i = 0; i < Clazz.extendedObjectMethods.length; i++) {
+ var p = Clazz.extendedObjectMethods[i];
+ if ("to$tring" == p || "toString" == p || "equals" == p || "hashCode" == p) {
+ continue;
+ }
+ String.prototype[p] = Clazz._O.prototype[p];
+ }
+}
+//Clazz.decorateAsType (String, "String", null, [java.io.Serializable, CharSequence, Comparable]);
+Clazz.implementOf (String, [java.io.Serializable, CharSequence, Comparable]);
+//Number.equals = Clazz.innerFunctions.equals;
+String.getName = Clazz.innerFunctions.getName;
+
+String.serialVersionUID = String.prototype.serialVersionUID = -6849794470754667710;
+
+String.prototype.$replace = function (c1, c2) {
+ /*
+ var sp = "\\$.*+{}?^()[]";
+ if (sp.indexOf (c1) != -1) {
+ c1 = "\\" + c1;
+ }
+ */
+ c1 = c1.replace (/([\\\/\$\.\*\+\{\}\?\^\(\)\[\]])/g, function ($0, $1) {
+ return "\\" + $1;
+ });
+ var regExp = new RegExp (c1, "gm");
+ return this.replace (regExp, c2);
+};
+String.prototype.$generateExpFunction = function (str) {
+ var arr = [];
+ var orders = [];
+ var idx = 0;
+ arr[0] = "";
+ var i = 0;
+ for (; i < str.length; i++) {
+ var ch = str.charAt (i);
+ if (i != str.length - 1 && ch == '\\') {
+ i++;
+ var c = str.charAt (i);
+ if (c == '\\') {
+ arr[idx] += '\\';
+ }
+ arr[idx] += c;
+ } else if (i != str.length - 1 && ch == '$') {
+ i++;
+ orders[idx] = parseInt (str.charAt (i));
+ idx++;
+ arr[idx] = "";
+ } else if (ch == '\r') {
+ arr[idx] += "\\r";
+ } else if (ch == '\n') {
+ arr[idx] += "\\n";
+ } else if (ch == '\t') {
+ arr[idx] += "\\t";
+ } else if (ch == '\"') {
+ arr[idx] += "\\\"";
+ } else {
+ arr[idx] += ch;
+ }
+ }
+ var funStr = "f = function (";
+ var max = Math.max.apply({},orders);
+ for (i = 0; i <= max; i++) {
+ funStr += "$" + i;
+ if (i != max) {
+ funStr += ", ";
+ }
+ }
+ funStr += ") { return ";
+ for (i = 0; i < arr.length - 1; i++) {
+ funStr += "\"" + arr[i] + "\" + $" + orders[i] + " + ";
+ }
+ funStr += "\"" + arr[i] + "\"; }";
+ var f = null;
+ eval (funStr)
+ return f;
+};
+
+String.prototype.replaceAll = function (exp, str) {
+ var regExp = new RegExp (exp, "gm");
+ return this.replace (regExp, this.$generateExpFunction (str));
+};
+String.prototype.replaceFirst = function (exp, str) {
+ var regExp = new RegExp (exp, "m");
+ return this.replace (regExp, this.$generateExpFunction (str));
+};
+String.prototype.matches = function (exp) {
+ if (exp != null) {
+ exp = "^(" + exp + ")$";
+ }
+ var regExp = new RegExp (exp, "gm");
+ var m = this.match (regExp);
+ return m != null && m.length != 0;
+};
+String.prototype.regionMatches = function (ignoreCase, toffset,
+ other, ooffset, len) {
+ /*
+ * Support different method signatures
+ */
+ if (typeof ignoreCase == "number"
+ || (ignoreCase != true && ignoreCase != false)) {
+ len = ooffset;
+ ooffset = other;
+ other = toffset;
+ toffset = ignoreCase;
+ ignoreCase = false;
+ }
+ var to = toffset;
+ var po = ooffset;
+ // Note: toffset, ooffset, or len might be near -1>>>1.
+ if ((ooffset < 0) || (toffset < 0) || (toffset > this.length - len) ||
+ (ooffset > other.length - len)) {
+ return false;
+ }
+ var s1 = this.substring (toffset, toffset + len);
+ var s2 = other.substring (ooffset, ooffset + len);
+ if (ignoreCase) {
+ s1 = s1.toLowerCase ();
+ s2 = s2.toLowerCase ();
+ }
+ return s1 == s2;
+};
+String.prototype.$plit = function (regex, limit) {
+ /*
+ * Support different method signatures
+ */
+ if (limit != null && limit > 0) {
+ if (limit == 1) {
+ return this;
+ }
+ var regExp = new RegExp ("(" + regex + ")", "gm");
+ var count = 1;
+ var s = this.replace (regExp, function ($0, $1) {
+ count++;
+ if (count == limit) {
+ return "@@_@@";
+ } else if (count > limit) {
+ return $0;
+ } else {
+ return $0;
+ }
+ });
+ regExp = new RegExp (regex, "gm");
+ var arr = this.split (regExp);
+ if (arr.length > limit) {
+ arr[limit - 1] = s.substring (s.indexOf ("@@_@@") + 5);
+ arr.length = limit;
+ }
+ return arr;
+ } else {
+ var regExp = new RegExp (regex, "gm");
+ return this.split (regExp);
+ }
+};
+
+String.prototype.trim = function () {
+ var len = this.length;
+ var st = 0;
+
+ while ((st < len) && (this.charAt (st) <= ' ')) {
+ st++;
+ }
+ while ((st < len) && (this.charAt (len - 1) <= ' ')) {
+ len--;
+ }
+ return ((st > 0) || (len < len)) ? this.substring (st, len) : this;
+};
+
+String.prototype.trim = function () {
+ return this.replace (/^\s+/g, '').replace (/\s+$/g, '');
+};
+
+/* private */
+String.prototype.startsWith_string_number = function (prefix, toffset) {
+ var to = toffset;
+ var po = 0;
+ var pc = prefix.length;
+ // Note: toffset might be near -1>>>1.
+ if ((toffset < 0) || (toffset > this.length - pc)) {
+ return false;
+ }
+ while (--pc >= 0) {
+ if (this.charAt (to++) != prefix.charAt (po++)) {
+ return false;
+ }
+ }
+ return true;
+};
+
+String.prototype.startsWith = function (prefix) { /* prefix, toffset */
+ if (arguments.length == 1) {
+ return this.startsWith_string_number (arguments[0], 0);
+ } else if (arguments.length == 2) {
+ return this.startsWith_string_number (arguments[0], arguments[1]);
+ } else {
+ return false;
+ }
+};
+
+String.prototype.endsWith = function (suffix) {
+ return this.startsWith (suffix, this.length - suffix.length);
+};
+
+String.prototype.equals = function (anObject) {
+ return this.valueOf () == anObject;
+};
+
+String.prototype.equalsIgnoreCase = function (anotherString) {
+ return (anotherString == null) ? false : (this == anotherString
+ || this.toLowerCase () == anotherString.toLowerCase ());
+};
+
+/* private */
+String.prototype.hash = 0;
+
+String.prototype.hashCode = function () {
+ var h = this.hash;
+ if (h == 0) {
+ var off = 0;
+ var len = this.length;
+ for (var i = 0; i < len; i++) {
+ h = 31*h + this.charCodeAt (off++);
+ h &= 0xffffffff;
+ }
+ this.hash = h;
+ }
+ return h;
+};
+
+String.prototype.getBytes = function () {
+ if (arguments.length == 4) {
+ return this.getChars (arguments[0], arguments[1], arguments[2], arguments[3]);
+ }
+ var s = this;
+ if (arguments.length == 1) {
+ var cs = arguments[0].toString().toLowerCase ();
+ var charset = [
+ "utf-8", "UTF8", "us-ascii", "iso-8859-1", "8859_1", "gb2312", "gb18030", "gbk"
+ ];
+ var existed = false;
+ for (var i = 0; i < charset.length; i++) {
+ if (charset[i] == cs) {
+ existed = true;
+ break;
+ }
+ }
+ if (!existed) {
+ throw new java.io.UnsupportedEncodingException ();
+ }
+ if (cs == "utf-8" || cs == "utf8") {
+ s = Encoding.convert2UTF8 (this);
+ }
+ }
+ var arrs = new Array (s.length);
+ var c = 0, ii = 0;
+ for (var i = 0; i < s.length; i++) {
+ c = s.charCodeAt (i);
+ if (c > 255) {
+ arrs[ii] = 0x1a;
+ arrs[ii + 1] = c & 0xff;
+ arrs[ii + 2] = (c & 0xff00) >> 8;
+ ii+=2;
+ } else {
+ arrs[ii] = c;
+ }
+ ii++;
+ }
+ return arrs;
+};
+
+String.prototype.compareTo = function (anotherString) {
+ if (anotherString == null) {
+ throw new java.lang.NullPointerException ();
+ }
+ var len1 = this.length;
+ var len2 = anotherString.length;
+ var n = Math.min (len1, len2);
+ var k = 0;
+ while (k < n) {
+ var c1 = this.charCodeAt (k);
+ var c2 = anotherString.charCodeAt (k);
+ if (c1 != c2) {
+ return c1 - c2;
+ }
+ k++;
+ }
+ return len1 - len2;
+};
+
+String.prototype.toCharArray = function () {
+ var result = new Array (this.length);
+ for (var i = 0; i < this.length; i++) {
+ result[i] = this.charAt (i);
+ }
+ return result;
+};
+String.value0f = String.valueOf;
+String.valueOf = function (o) {
+ if (o == "undefined") {
+ return String.value0f ();
+ }
+ if (o instanceof Array) {
+ if (arguments.length == 1) {
+ return o.join ('');
+ } else {
+ var off = arguments[1];
+ var len = arguments[2];
+ var oo = new Array (len);
+ for (var i = 0; i < len; i++) {
+ oo[i] = o[off + i];
+ }
+ return oo.join ('');
+ }
+ }
+ return "" + o;
+};
+
+String.prototype.subSequence = function (beginIndex, endIndex) {
+ return this.substring(beginIndex, endIndex);
+};
+
+String.prototype.compareToIgnoreCase = function (str) {
+ if (str == null) {
+ throw new NullPointerException ();
+ }
+ var s1 = this.toUpperCase ();
+ var s2 = str.toUpperCase ();
+ if (s1 == s2) {
+ return 0;
+ } else {
+ var s1 = this.toLowerCase ();
+ var s2 = str.toLowerCase ();
+ if (s1 == s2) {
+ return 0;
+ } else if (s1 > s2) {
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+};
+
+String.prototype.contentEquals = function (sb) {
+ if (this.length != sb.length ()) {
+ return false;
+ }
+ var v = sb.getValue ();
+ var i = 0;
+ var j = 0;
+ var n = this.length;
+ while (n-- != 0) {
+ if (this.charCodeAt (i++) != v[j++]) {
+ return false;
+ }
+ }
+ return true;
+};
+
+String.prototype.getChars = function (srcBegin, srcEnd, dst, dstBegin) {
+ if (srcBegin < 0) {
+ throw new StringIndexOutOfBoundsException(srcBegin);
+ }
+ if (srcEnd > this.length) {
+ throw new StringIndexOutOfBoundsException(srcEnd);
+ }
+ if (srcBegin > srcEnd) {
+ throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
+ }
+ if (dst == null) {
+ throw new NullPointerException ();
+ }
+ for (var i = 0; i < srcEnd - srcBegin; i++) {
+ dst[dstBegin + i] = this.charAt (srcBegin + i);
+ }
+};
+String.prototype.$concat = String.prototype.concat;
+String.prototype.concat = function (s) {
+ if (s == null) {
+ throw new NullPointerException ();
+ }
+ return this.$concat (s);
+};
+
+String.prototype.$lastIndexOf = String.prototype.lastIndexOf;
+String.prototype.lastIndexOf = function (s, last) {
+ if (last != null && last + this.length <= 0) {
+ return -1;
+ }
+ if (last != null) {
+ return this.$lastIndexOf (s, last);
+ } else {
+ return this.$lastIndexOf (s);
+ }
+};
+
+String.prototype.intern = function () {
+ return this.valueOf ();
+};
+String.copyValueOf = String.prototype.copyValueOf = function () {
+ if (arguments.length == 1) {
+ return String.instantialize (arguments[0]);
+ } else {
+ return String.instantialize (arguments[0], arguments[1], arguments[2]);
+ }
+};
+String.indexOf = function (source, sourceOffset, sourceCount,
+ target, targetOffset, targetCount, fromIndex) {
+ if (fromIndex >= sourceCount) {
+ return (targetCount == 0 ? sourceCount : -1);
+ }
+ if (fromIndex < 0) {
+ fromIndex = 0;
+ }
+ if (targetCount == 0) {
+ return fromIndex;
+ }
+
+ var first = target[targetOffset];
+ var i = sourceOffset + fromIndex;
+ var max = sourceOffset + (sourceCount - targetCount);
+
+ startSearchForFirstChar:
+ while (true) {
+ /* Look for first character. */
+ while (i <= max && source[i] != first) {
+ i++;
+ }
+ if (i > max) {
+ return -1;
+ }
+
+ /* Found first character, now look at the rest of v2 */
+ var j = i + 1;
+ var end = j + targetCount - 1;
+ var k = targetOffset + 1;
+ while (j < end) {
+ if (source[j++] != target[k++]) {
+ i++;
+ /* Look for str's first char again. */
+ continue startSearchForFirstChar;
+ }
+ }
+ return i - sourceOffset; /* Found whole string. */
+ }
+};
+
+String.instantialize = function () {
+ if (arguments.length == 0) {
+ return new String ();
+ } else if (arguments.length == 1) {
+ var x = arguments[0];
+ if (typeof x == "string" || x instanceof String) {
+ return new String (x);
+ } else if (x instanceof Array || x instanceof Int32Array) {
+ if (x.length > 0 && typeof x[0] == "number") {
+ var arr = new Array (x.length);
+ for (var i = 0; i < x.length; i++) {
+ arr[i] = String.fromCharCode (x[i] & 0xff);
+ }
+ return Encoding.readUTF8 (arr.join (''));
+ }
+ return x.join ('');
+ } else if (x.__CLASS_NAME__ == "StringBuffer"
+ || x.__CLASS_NAME__ == "java.lang.StringBuffer") {
+ var value = x.shareValue();
+ var length = x.length ();
+ var valueCopy = new Array (length);
+ for (var i = 0; i < length; i++) {
+ valueCopy[i] = value[i];
+ }
+ return valueCopy.join ('')
+ //return x.value.join ('');
+ } else {
+ return "" + x;
+ }
+ } else if (arguments.length == 2) {
+ var x = arguments[0];
+ var hibyte=arguments[1];
+ if (typeof hibyte == "string") {
+ return String.instantialize(x,0,x.length, hibyte);
+ } else {
+ return String.instantialize(x,hibyte,0,x.length);
+ }
+ } else if (arguments.length == 3) {
+ var bytes = arguments[0];
+ var offset = arguments[1];
+ var length = arguments[2];
+ if (arguments[2] instanceof Array) {
+ bytes = arguments[2];
+ offset = arguments[0];
+ length = arguments[1];
+ }
+ var arr = new Array (length);
+ if (offset < 0 || length + offset > bytes.length) {
+ throw new IndexOutOfBoundsException ();
+ }
+ if (length > 0) {
+ var isChar = (bytes[offset].length != null);
+ if (isChar) {
+ for (var i = 0; i < length; i++) {
+ arr[i] = bytes[offset + i];
+ }
+ } else {
+ for (var i = 0; i < length; i++) {
+ arr[i]=String.fromCharCode (bytes[offset+i]);
+ }
+ }
+ }
+ return arr.join ('');
+ } else if (arguments.length == 4) {
+ var bytes = arguments[0];
+ var y = arguments[3];
+ if (typeof y == "string" || y instanceof String) {
+ var offset = arguments[1];
+ var length = arguments[2];
+ var arr = new Array (length);
+ for (var i = 0; i < length; i++) {
+ arr[i] = bytes[offset + i];
+ if (typeof arr[i] == "number") {
+ arr[i] = String.fromCharCode (arr[i] & 0xff);
+ }
+ }
+ var cs = y.toLowerCase ();
+ if (cs == "utf-8" || cs == "utf8") {
+ return Encoding.readUTF8 (arr.join (''));
+ } else {
+ return arr.join ('');
+ }
+ } else {
+ var count = arguments[3];
+ var offset = arguments[2];
+ var hibyte = arguments[1];
+ var value = new Array (count);
+ if (hibyte == 0) {
+ for (var i = count ; i-- > 0 ;) {
+ value[i] = String.fromCharCode (bytes[i + offset] & 0xff);
+ }
+ } else {
+ hibyte <<= 8;
+ for (var i = count ; i-- > 0 ;) {
+ value[i] = String.fromCharCode (hibyte | (bytes[i + offset] & 0xff));
+ }
+ }
+ return value.join ('');
+ }
+ } else {
+ var s = "";
+ for (var i = 0; i < arguments.length; i++) {
+ s += arguments[i];
+ }
+ return s;
+ }
+};
+
+if (navigator.userAgent.toLowerCase ().indexOf ("chrome") != -1) { // Google Chrome's bug
+ String.prototype.toString = function () {
+ return this;
+ };
+}
+
+} // end of String.prototype.$replace
});
\ No newline at end of file