⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nativestring.java

📁 java中比较著名的js引擎当属mozilla开源的rhino
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            /* Don't delimit whitespace at end of string. */            if (i == length)                return -1;            /* Skip over the non-whitespace chars. */            while (i < length                   && !Character.isWhitespace(target.charAt(i)))                i++;            /* Now skip the next run of whitespace. */            int j = i;            while (j < length && Character.isWhitespace(target.charAt(j)))                j++;            /* Update matchlen to count delimiter chars. */            matchlen[0] = j - i;            return i;        }        /*         * Stop if past end of string.  If at end of string, we will         * return target length, so that         *         *  "ab,".split(',') => new Array("ab", "")         *         * and the resulting array converts back to the string "ab,"         * for symmetry.  NB: This differs from perl, which drops the         * trailing empty substring if the LIMIT argument is omitted.         */        if (i > length)            return -1;        /*         * Match a regular expression against the separator at or         * above index i.  Return -1 at end of string instead of         * trying for a match, so we don't get stuck in a loop.         */        if (re != null) {            return reProxy.find_split(cx, scope, target, separator, re,                                      ip, matchlen, matched, parensp);        }        /*         * Deviate from ECMA by never splitting an empty string by any separator         * string into a non-empty array (an array of length 1 that contains the         * empty string).         */        if (version != Context.VERSION_DEFAULT && version < Context.VERSION_1_3            && length == 0)            return -1;        /*         * Special case: if sep is the empty string, split str into         * one character substrings.  Let our caller worry about         * whether to split once at end of string into an empty         * substring.         *         * For 1.2 compatibility, at the end of the string, we return the length as         * the result, and set the separator length to 1 -- this allows the caller         * to include an additional null string at the end of the substring list.         */        if (separator.length() == 0) {            if (version == Context.VERSION_1_2) {                if (i == length) {                    matchlen[0] = 1;                    return i;                }                return i + 1;            }            return (i == length) ? -1 : i + 1;        }        /* Punt to j.l.s.indexOf; return target length if separator is         * not found.         */        if (ip[0] >= length)            return length;        i = target.indexOf(separator, ip[0]);        return (i != -1) ? i : length;    }    /*     * See ECMA 15.5.4.8.  Modified to match JS 1.2 - optionally takes     * a limit argument and accepts a regular expression as the split     * argument.     */    private static Object js_split(Context cx, Scriptable scope,                                   String target, Object[] args)    {        // create an empty Array to return;        Scriptable top = getTopLevelScope(scope);        Scriptable result = ScriptRuntime.newObject(cx, top, "Array", null);        // return an array consisting of the target if no separator given        // don't check against undefined, because we want        // 'fooundefinedbar'.split(void 0) to split to ['foo', 'bar']        if (args.length < 1) {            result.put(0, result, target);            return result;        }        // Use the second argument as the split limit, if given.        boolean limited = (args.length > 1) && (args[1] != Undefined.instance);        long limit = 0;  // Initialize to avoid warning.        if (limited) {            /* Clamp limit between 0 and 1 + string length. */            limit = ScriptRuntime.toUint32(args[1]);            if (limit > target.length())                limit = 1 + target.length();        }        String separator = null;        int[] matchlen = new int[1];        Scriptable re = null;        RegExpProxy reProxy = null;        if (args[0] instanceof Scriptable) {            reProxy = ScriptRuntime.getRegExpProxy(cx);            if (reProxy != null) {                Scriptable test = (Scriptable)args[0];                if (reProxy.isRegExp(test)) {                    re = test;                }            }        }        if (re == null) {            separator = ScriptRuntime.toString(args[0]);            matchlen[0] = separator.length();        }        // split target with separator or re        int[] ip = { 0 };        int match;        int len = 0;        boolean[] matched = { false };        String[][] parens = { null };        int version = cx.getLanguageVersion();        while ((match = find_split(cx, scope, target, separator, version,                                   reProxy, re, ip, matchlen, matched, parens))               >= 0)        {            if ((limited && len >= limit) || (match > target.length()))                break;            String substr;            if (target.length() == 0)                substr = target;            else                substr = target.substring(ip[0], match);            result.put(len, result, substr);            len++;        /*         * Imitate perl's feature of including parenthesized substrings         * that matched part of the delimiter in the new array, after the         * split substring that was delimited.         */            if (re != null && matched[0] == true) {                int size = parens[0].length;                for (int num = 0; num < size; num++) {                    if (limited && len >= limit)                        break;                    result.put(len, result, parens[0][num]);                    len++;                }                matched[0] = false;            }            ip[0] = match + matchlen[0];            if (version < Context.VERSION_1_3                && version != Context.VERSION_DEFAULT)            {        /*         * Deviate from ECMA to imitate Perl, which omits a final         * split unless a limit argument is given and big enough.         */                if (!limited && ip[0] == target.length())                    break;            }        }        return result;    }    /*     * See ECMA 15.5.4.15     */    private static String js_substring(Context cx, String target,                                       Object[] args)    {        int length = target.length();        double start = ScriptRuntime.toInteger(args, 0);        double end;        if (start < 0)            start = 0;        else if (start > length)            start = length;        if (args.length <= 1 || args[1] == Undefined.instance) {            end = length;        } else {            end = ScriptRuntime.toInteger(args[1]);            if (end < 0)                end = 0;            else if (end > length)                end = length;            // swap if end < start            if (end < start) {                if (cx.getLanguageVersion() != Context.VERSION_1_2) {                    double temp = start;                    start = end;                    end = temp;                } else {                    // Emulate old JDK1.0 java.lang.String.substring()                    end = start;                }            }        }        return target.substring((int)start, (int)end);    }    int getLength() {        return string.length();    }    /*     * Non-ECMA methods.     */    private static String js_substr(String target, Object[] args) {        if (args.length < 1)            return target;        double begin = ScriptRuntime.toInteger(args[0]);        double end;        int length = target.length();        if (begin < 0) {            begin += length;            if (begin < 0)                begin = 0;        } else if (begin > length) {            begin = length;        }        if (args.length == 1) {            end = length;        } else {            end = ScriptRuntime.toInteger(args[1]);            if (end < 0)                end = 0;            end += begin;            if (end > length)                end = length;        }        return target.substring((int)begin, (int)end);    }    /*     * Python-esque sequence operations.     */    private static String js_concat(String target, Object[] args) {        int N = args.length;        if (N == 0) { return target; }        else if (N == 1) {            String arg = ScriptRuntime.toString(args[0]);            return target.concat(arg);        }        // Find total capacity for the final string to avoid unnecessary        // re-allocations in StringBuffer        int size = target.length();        String[] argsAsStrings = new String[N];        for (int i = 0; i != N; ++i) {            String s = ScriptRuntime.toString(args[i]);            argsAsStrings[i] = s;            size += s.length();        }        StringBuffer result = new StringBuffer(size);        result.append(target);        for (int i = 0; i != N; ++i) {            result.append(argsAsStrings[i]);        }        return result.toString();    }    private static String js_slice(String target, Object[] args) {        if (args.length != 0) {            double begin = ScriptRuntime.toInteger(args[0]);            double end;            int length = target.length();            if (begin < 0) {                begin += length;                if (begin < 0)                    begin = 0;            } else if (begin > length) {                begin = length;            }            if (args.length == 1) {                end = length;            } else {                end = ScriptRuntime.toInteger(args[1]);                if (end < 0) {                    end += length;                    if (end < 0)                        end = 0;                } else if (end > length) {                    end = length;                }                if (end < begin)                    end = begin;            }            return target.substring((int)begin, (int)end);        }        return target;    }// #string_id_map#    protected int findPrototypeId(String s)    {        int id;// #generated# Last update: 2004-03-17 13:44:29 CET        L0: { id = 0; String X = null; int c;            L: switch (s.length()) {            case 3: c=s.charAt(2);                if (c=='b') { if (s.charAt(0)=='s' && s.charAt(1)=='u') {id=Id_sub; break L0;} }                else if (c=='g') { if (s.charAt(0)=='b' && s.charAt(1)=='i') {id=Id_big; break L0;} }                else if (c=='p') { if (s.charAt(0)=='s' && s.charAt(1)=='u') {id=Id_sup; break L0;} }                break L;            case 4: c=s.charAt(0);                if (c=='b') { X="bold";id=Id_bold; }                else if (c=='l') { X="link";id=Id_link; }                break L;            case 5: switch (s.charAt(4)) {                case 'd': X="fixed";id=Id_fixed; break L;                case 'e': X="slice";id=Id_slice; break L;                case 'h': X="match";id=Id_match; break L;                case 'k': X="blink";id=Id_blink; break L;                case 'l': X="small";id=Id_small; break L;                case 't': X="split";id=Id_split; break L;                } break L;            case 6: switch (s.charAt(1)) {                case 'e': X="search";id=Id_search; break L;                case 'h': X="charAt";id=Id_charAt; break L;                case 'n': X="anchor";id=Id_anchor; break L;                case 'o': X="concat";id=Id_concat; break L;                case 'q': X="equals";id=Id_equals; break L;                case 't': X="strike";id=Id_strike; break L;                case 'u': X="substr";id=Id_substr; break L;                } break L;            case 7: switch (s.charAt(1)) {                case 'a': X="valueOf";id=Id_valueOf; break L;                case 'e': X="replace";id=Id_replace; break L;                case 'n': X="indexOf";id=Id_indexOf; break L;                case 't': X="italics";id=Id_italics; break L;                } break L;            case 8: c=s.charAt(4);                if (c=='r') { X="toString";id=Id_toString; }                else if (c=='s') { X="fontsize";id=Id_fontsize; }                else if (c=='u') { X="toSource";id=Id_toSource; }                break L;            case 9: c=s.charAt(0);                if (c=='f') { X="fontcolor";id=Id_fontcolor; }                else if (c=='s') { X="substring";id=Id_substring; }                break L;            case 10: X="charCodeAt";id=Id_charCodeAt; break L;            case 11: switch (s.charAt(2)) {                case 'L': X="toLowerCase";id=Id_toLowerCase; break L;                case 'U': X="toUpperCase";id=Id_toUpperCase; break L;                case 'n': X="constructor";id=Id_constructor; break L;                case 's': X="lastIndexOf";id=Id_lastIndexOf; break L;                } break L;            case 16: X="equalsIgnoreCase";id=Id_equalsIgnoreCase; break L;            }            if (X!=null && X!=s && !X.equals(s)) id = 0;        }// #/generated#        return id;    }    private static final int        ConstructorId_fromCharCode   = -1,        Id_constructor               = 1,        Id_toString                  = 2,        Id_toSource                  = 3,        Id_valueOf                   = 4,        Id_charAt                    = 5,        Id_charCodeAt                = 6,        Id_indexOf                   = 7,        Id_lastIndexOf               = 8,        Id_split                     = 9,        Id_substring                 = 10,        Id_toLowerCase               = 11,        Id_toUpperCase               = 12,        Id_substr                    = 13,        Id_concat                    = 14,        Id_slice                     = 15,        Id_bold                      = 16,        Id_italics                   = 17,        Id_fixed                     = 18,        Id_strike                    = 19,        Id_small                     = 20,        Id_big                       = 21,        Id_blink                     = 22,        Id_sup                       = 23,        Id_sub                       = 24,        Id_fontsize                  = 25,        Id_fontcolor                 = 26,        Id_link                      = 27,        Id_anchor                    = 28,        Id_equals                    = 29,        Id_equalsIgnoreCase          = 30,        Id_match                     = 31,        Id_search                    = 32,        Id_replace                   = 33,        MAX_PROTOTYPE_ID             = 33;// #/string_id_map#    private String string;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -