This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-lang.git
The following commit(s) were added to refs/heads/master by this push: new c11e895 Sort members. c11e895 is described below commit c11e89595db48cd99c9de60e437fa99399f0d47f Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Tue Mar 2 08:46:17 2021 -0500 Sort members. --- .../apache/commons/lang3/CharSequenceUtils.java | 284 ++++++++++----------- 1 file changed, 142 insertions(+), 142 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java b/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java index b08cb54..9a1dc82 100644 --- a/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java +++ b/src/main/java/org/apache/commons/lang3/CharSequenceUtils.java @@ -27,33 +27,46 @@ public class CharSequenceUtils { private static final int NOT_FOUND = -1; - /** - * <p>{@code CharSequenceUtils} instances should NOT be constructed in - * standard programming. </p> - * - * <p>This constructor is public to permit tools that require a JavaBean - * instance to operate.</p> - */ - public CharSequenceUtils() { + static final int TO_STRING_LIMIT = 16; + + private static boolean checkLaterThan1(final CharSequence cs, final CharSequence searchChar, final int len2, final int start1) { + for (int i = 1, j = len2 - 1; i <= j; i++, j--) { + if (cs.charAt(start1 + i) != searchChar.charAt(i) + || + cs.charAt(start1 + j) != searchChar.charAt(j) + ) { + return false; + } + } + return true; } - //----------------------------------------------------------------------- /** - * <p>Returns a new {@code CharSequence} that is a subsequence of this - * sequence starting with the {@code char} value at the specified index.</p> - * - * <p>This provides the {@code CharSequence} equivalent to {@link String#substring(int)}. - * The length (in {@code char}) of the returned sequence is {@code length() - start}, - * so if {@code start == end} then an empty sequence is returned.</p> + * Used by the indexOf(CharSequence methods) as a green implementation of indexOf. * - * @param cs the specified subsequence, null returns null - * @param start the start index, inclusive, valid - * @return a new subsequence, may be null - * @throws IndexOutOfBoundsException if {@code start} is negative or if - * {@code start} is greater than {@code length()} + * @param cs the {@code CharSequence} to be processed + * @param searchChar the {@code CharSequence} to be searched for + * @param start the start index + * @return the index where the search sequence was found */ - public static CharSequence subSequence(final CharSequence cs, final int start) { - return cs == null ? null : cs.subSequence(start, cs.length()); + static int indexOf(final CharSequence cs, final CharSequence searchChar, final int start) { + if (cs instanceof String) { + return ((String) cs).indexOf(searchChar.toString(), start); + } else if (cs instanceof StringBuilder) { + return ((StringBuilder) cs).indexOf(searchChar.toString(), start); + } else if (cs instanceof StringBuffer) { + return ((StringBuffer) cs).indexOf(searchChar.toString(), start); + } + return cs.toString().indexOf(searchChar.toString(), start); +// if (cs instanceof String && searchChar instanceof String) { +// // TODO: Do we assume searchChar is usually relatively small; +// // If so then calling toString() on it is better than reverting to +// // the green implementation in the else block +// return ((String) cs).indexOf((String) searchChar, start); +// } else { +// // TODO: Implement rather than convert to String +// return cs.toString().indexOf(searchChar.toString(), start); +// } } //----------------------------------------------------------------------- @@ -126,100 +139,6 @@ public class CharSequenceUtils { } /** - * Used by the indexOf(CharSequence methods) as a green implementation of indexOf. - * - * @param cs the {@code CharSequence} to be processed - * @param searchChar the {@code CharSequence} to be searched for - * @param start the start index - * @return the index where the search sequence was found - */ - static int indexOf(final CharSequence cs, final CharSequence searchChar, final int start) { - if (cs instanceof String) { - return ((String) cs).indexOf(searchChar.toString(), start); - } else if (cs instanceof StringBuilder) { - return ((StringBuilder) cs).indexOf(searchChar.toString(), start); - } else if (cs instanceof StringBuffer) { - return ((StringBuffer) cs).indexOf(searchChar.toString(), start); - } - return cs.toString().indexOf(searchChar.toString(), start); -// if (cs instanceof String && searchChar instanceof String) { -// // TODO: Do we assume searchChar is usually relatively small; -// // If so then calling toString() on it is better than reverting to -// // the green implementation in the else block -// return ((String) cs).indexOf((String) searchChar, start); -// } else { -// // TODO: Implement rather than convert to String -// return cs.toString().indexOf(searchChar.toString(), start); -// } - } - - /** - * Returns the index within {@code cs} of the last occurrence of - * the specified character, searching backward starting at the - * specified index. For values of {@code searchChar} in the range - * from 0 to 0xFFFF (inclusive), the index returned is the largest - * value <i>k</i> such that: - * <blockquote><pre> - * (this.charAt(<i>k</i>) == searchChar) && (<i>k</i> <= start) - * </pre></blockquote> - * is true. For other values of {@code searchChar}, it is the - * largest value <i>k</i> such that: - * <blockquote><pre> - * (this.codePointAt(<i>k</i>) == searchChar) && (<i>k</i> <= start) - * </pre></blockquote> - * is true. In either case, if no such character occurs in {@code cs} - * at or before position {@code start}, then {@code -1} is returned. - * - * <p>All indices are specified in {@code char} values - * (Unicode code units). - * - * @param cs the {@code CharSequence} to be processed - * @param searchChar the char to be searched for - * @param start the start index, negative returns -1, beyond length starts at end - * @return the index where the search char was found, -1 if not found - * @since 3.6 updated to behave more like {@code String} - */ - static int lastIndexOf(final CharSequence cs, final int searchChar, int start) { - if (cs instanceof String) { - return ((String) cs).lastIndexOf(searchChar, start); - } - final int sz = cs.length(); - if (start < 0) { - return NOT_FOUND; - } - if (start >= sz) { - start = sz - 1; - } - if (searchChar < Character.MIN_SUPPLEMENTARY_CODE_POINT) { - for (int i = start; i >= 0; --i) { - if (cs.charAt(i) == searchChar) { - return i; - } - } - return NOT_FOUND; - } - //supplementary characters (LANG1300) - //NOTE - we must do a forward traversal for this to avoid duplicating code points - if (searchChar <= Character.MAX_CODE_POINT) { - final char[] chars = Character.toChars(searchChar); - //make sure it's not the last index - if (start == sz - 1) { - return NOT_FOUND; - } - for (int i = start; i >= 0; i--) { - final char high = cs.charAt(i); - final char low = cs.charAt(i + 1); - if (chars[0] == high && chars[1] == low) { - return i; - } - } - } - return NOT_FOUND; - } - - static final int TO_STRING_LIMIT = 16; - - /** * Used by the lastIndexOf(CharSequence methods) as a green implementation of lastIndexOf * * @param cs the {@code CharSequence} to be processed @@ -290,38 +209,68 @@ public class CharSequenceUtils { } } - private static boolean checkLaterThan1(final CharSequence cs, final CharSequence searchChar, final int len2, final int start1) { - for (int i = 1, j = len2 - 1; i <= j; i++, j--) { - if (cs.charAt(start1 + i) != searchChar.charAt(i) - || - cs.charAt(start1 + j) != searchChar.charAt(j) - ) { - return false; - } - } - return true; - } - /** - * Converts the given CharSequence to a char[]. + * Returns the index within {@code cs} of the last occurrence of + * the specified character, searching backward starting at the + * specified index. For values of {@code searchChar} in the range + * from 0 to 0xFFFF (inclusive), the index returned is the largest + * value <i>k</i> such that: + * <blockquote><pre> + * (this.charAt(<i>k</i>) == searchChar) && (<i>k</i> <= start) + * </pre></blockquote> + * is true. For other values of {@code searchChar}, it is the + * largest value <i>k</i> such that: + * <blockquote><pre> + * (this.codePointAt(<i>k</i>) == searchChar) && (<i>k</i> <= start) + * </pre></blockquote> + * is true. In either case, if no such character occurs in {@code cs} + * at or before position {@code start}, then {@code -1} is returned. * - * @param source the {@code CharSequence} to be processed. - * @return the resulting char array, never null. - * @since 3.11 + * <p>All indices are specified in {@code char} values + * (Unicode code units). + * + * @param cs the {@code CharSequence} to be processed + * @param searchChar the char to be searched for + * @param start the start index, negative returns -1, beyond length starts at end + * @return the index where the search char was found, -1 if not found + * @since 3.6 updated to behave more like {@code String} */ - public static char[] toCharArray(final CharSequence source) { - final int len = StringUtils.length(source); - if (len == 0) { - return ArrayUtils.EMPTY_CHAR_ARRAY; + static int lastIndexOf(final CharSequence cs, final int searchChar, int start) { + if (cs instanceof String) { + return ((String) cs).lastIndexOf(searchChar, start); } - if (source instanceof String) { - return ((String) source).toCharArray(); + final int sz = cs.length(); + if (start < 0) { + return NOT_FOUND; } - final char[] array = new char[len]; - for (int i = 0; i < len; i++) { - array[i] = source.charAt(i); + if (start >= sz) { + start = sz - 1; } - return array; + if (searchChar < Character.MIN_SUPPLEMENTARY_CODE_POINT) { + for (int i = start; i >= 0; --i) { + if (cs.charAt(i) == searchChar) { + return i; + } + } + return NOT_FOUND; + } + //supplementary characters (LANG1300) + //NOTE - we must do a forward traversal for this to avoid duplicating code points + if (searchChar <= Character.MAX_CODE_POINT) { + final char[] chars = Character.toChars(searchChar); + //make sure it's not the last index + if (start == sz - 1) { + return NOT_FOUND; + } + for (int i = start; i >= 0; i--) { + final char high = cs.charAt(i); + final char low = cs.charAt(i + 1); + if (chars[0] == high && chars[1] == low) { + return i; + } + } + } + return NOT_FOUND; } /** @@ -380,4 +329,55 @@ public class CharSequenceUtils { return true; } + + //----------------------------------------------------------------------- + /** + * <p>Returns a new {@code CharSequence} that is a subsequence of this + * sequence starting with the {@code char} value at the specified index.</p> + * + * <p>This provides the {@code CharSequence} equivalent to {@link String#substring(int)}. + * The length (in {@code char}) of the returned sequence is {@code length() - start}, + * so if {@code start == end} then an empty sequence is returned.</p> + * + * @param cs the specified subsequence, null returns null + * @param start the start index, inclusive, valid + * @return a new subsequence, may be null + * @throws IndexOutOfBoundsException if {@code start} is negative or if + * {@code start} is greater than {@code length()} + */ + public static CharSequence subSequence(final CharSequence cs, final int start) { + return cs == null ? null : cs.subSequence(start, cs.length()); + } + + /** + * Converts the given CharSequence to a char[]. + * + * @param source the {@code CharSequence} to be processed. + * @return the resulting char array, never null. + * @since 3.11 + */ + public static char[] toCharArray(final CharSequence source) { + final int len = StringUtils.length(source); + if (len == 0) { + return ArrayUtils.EMPTY_CHAR_ARRAY; + } + if (source instanceof String) { + return ((String) source).toCharArray(); + } + final char[] array = new char[len]; + for (int i = 0; i < len; i++) { + array[i] = source.charAt(i); + } + return array; + } + + /** + * <p>{@code CharSequenceUtils} instances should NOT be constructed in + * standard programming. </p> + * + * <p>This constructor is public to permit tools that require a JavaBean + * instance to operate.</p> + */ + public CharSequenceUtils() { + } }