📄 wildcardhelper.java.svn-base
字号:
} 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 + -