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

📄 wildcardhelper.java.svn-base

📁 MVC开源框架
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
                }                matchBegin = false;            }            // Advance buffpos            buffpos += (charpos - exprpos);            // Check for END's            if (exprchr == MATCH_END) {                if (rsltpos > 0) {                    map.put(Integer.toString(++mcount),                        new String(rslt, 0, rsltpos));                }                // Don't care about rest of input buffer                return (true);            } else if (exprchr == MATCH_THEEND) {                if (rsltpos > 0) {                    map.put(Integer.toString(++mcount),                        new String(rslt, 0, rsltpos));                }                // Check that we reach buffer's end                return (buffpos == buff.length);            }            // Search the next expression character            exprpos = ++charpos;            while (expr[charpos] >= 0) {                charpos++;            }            int prevchr = exprchr;            exprchr = expr[charpos];            // We have here prevchr == * or **.            offset =                (prevchr == MATCH_FILE)                ? indexOfArray(expr, exprpos, charpos, buff, buffpos)                : lastIndexOfArray(expr, exprpos, charpos, buff, buffpos);            if (offset < 0) {                return (false);            }            // Copy the data from the source buffer into the result buffer            // to substitute the expression character            if (prevchr == MATCH_PATH) {                while (buffpos < offset) {                    rslt[rsltpos++] = buff[buffpos++];                }            } else {                // Matching file, don't copy '/'                while (buffpos < offset) {                    if (buff[buffpos] == '/') {                        return (false);                    }                    rslt[rsltpos++] = buff[buffpos++];                }            }            map.put(Integer.toString(++mcount), new String(rslt, 0, rsltpos));            rsltpos = 0;        }    }    /**     * Get the offset of a part of an int array within a char array. <br> This     * method return the index in d of the first occurrence after dpos of that     * part of array specified by r, starting at rpos and terminating at     * rend.     *     * @param r    The array containing the data that need to be matched in     *             d.     * @param rpos The index of the first character in r to look for.     * @param rend The index of the last character in r to look for plus 1.     * @param d    The array of char that should contain a part of r.     * @param dpos The starting offset in d for the matching.     * @return The offset in d of the part of r matched in d or -1 if that was     *         not found.     */    protected int indexOfArray(int[] r, int rpos, int rend, char[] d,        int dpos) {        // Check if pos and len are legal        if (rend < rpos) {            throw new IllegalArgumentException("rend < rpos");        }        // If we need to match a zero length string return current dpos        if (rend == rpos) {            return (d.length); //?? dpos?        }        // If we need to match a 1 char length string do it simply        if ((rend - rpos) == 1) {            // Search for the specified character            for (int x = dpos; x < d.length; x++) {                if (r[rpos] == d[x]) {                    return (x);                }            }        }        // Main string matching loop. It gets executed if the characters to        // match are less then the characters left in the d buffer        while (((dpos + rend) - rpos) <= d.length) {            // Set current startpoint in d            int y = dpos;            // Check every character in d for equity. If the string is matched            // return dpos            for (int x = rpos; x <= rend; x++) {                if (x == rend) {                    return (dpos);                }                if (r[x] != d[y++]) {                    break;                }            }            // Increase dpos to search for the same string at next offset            dpos++;        }        // The remaining chars in d buffer were not enough or the string        // wasn't matched        return (-1);    }    /**     * Get the offset of a last occurance of an int array within a char array.     * <br> This method return the index in d of the last occurrence after     * dpos of that part of array specified by r, starting at rpos and     * terminating at rend.     *     * @param r    The array containing the data that need to be matched in     *             d.     * @param rpos The index of the first character in r to look for.     * @param rend The index of the last character in r to look for plus 1.     * @param d    The array of char that should contain a part of r.     * @param dpos The starting offset in d for the matching.     * @return The offset in d of the last part of r matched in d or -1 if     *         that was not found.     */    protected int lastIndexOfArray(int[] r, int rpos, int rend, char[] d,        int dpos) {        // Check if pos and len are legal        if (rend < rpos) {            throw new IllegalArgumentException("rend < rpos");        }        // If we need to match a zero length string return current dpos        if (rend == rpos) {            return (d.length); //?? dpos?        }        // If we need to match a 1 char length string do it simply        if ((rend - rpos) == 1) {            // Search for the specified character            for (int x = d.length - 1; x > dpos; x--) {                if (r[rpos] == d[x]) {                    return (x);                }            }        }        // Main string matching loop. It gets executed if the characters to        // match are less then the characters left in the d buffer        int l = d.length - (rend - rpos);        while (l >= dpos) {            // Set current startpoint in d            int y = l;            // Check every character in d for equity. If the string is matched            // return dpos            for (int x = rpos; x <= rend; x++) {                if (x == rend) {                    return (l);                }                if (r[x] != d[y++]) {                    break;                }            }            // Decrease l to search for the same string at next offset            l--;        }        // The remaining chars in d buffer were not enough or the string        // wasn't matched        return (-1);    }    /**     * Matches elements of array r from rpos to rend with array d, starting     * from dpos. <br> This method return true if elements of array r from     * rpos to rend equals elements of array d starting from dpos to     * dpos+(rend-rpos).     *     * @param r    The array containing the data that need to be matched in     *             d.     * @param rpos The index of the first character in r to look for.     * @param rend The index of the last character in r to look for.     * @param d    The array of char that should start from a part of r.     * @param dpos The starting offset in d for the matching.     * @return true if array d starts from portion of array r.     */    protected boolean matchArray(int[] r, int rpos, int rend, char[] d,        int dpos) {        if ((d.length - dpos) < (rend - rpos)) {            return (false);        }        for (int i = rpos; i < rend; i++) {            if (r[i] != d[dpos++]) {                return (false);            }        }        return (true);    }}

⌨️ 快捷键说明

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