[ https://issues.apache.org/jira/browse/LANG-1124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Loic Guibert updated LANG-1124: ------------------------------- Description: Add methods to split a String by fixed lengths : {code:java} public static String[] splitByLength(String str, int ... lengths); public static String[] splitByLengthRepeatedly(String str, int ... lengths); {code} Detail : {code:java} /** * <p>Split a String into an array, using an array of fixed string lengths.</p> * * <p>If not null String input, the returned array size is same as the input lengths array.</p> * * <p>A null input String returns {@code null}. * A {@code null} or empty input lengths array returns an empty array. * A {@code 0} in the input lengths array results in en empty string.</p> * * <p>Extra characters are ignored (ie String length greater than sum of split lengths). * All empty substrings other than zero length requested, are returned {@code null}.</p> * * <pre> * StringUtils.splitByLength(null, *) = null * StringUtils.splitByLength("abc") = [] * StringUtils.splitByLength("abc", null) = [] * StringUtils.splitByLength("abc", []) = [] * StringUtils.splitByLength("", 2, 4, 1) = [null, null, null] * * StringUtils.splitByLength("abcdefg", 2, 4, 1) = ["ab", "cdef", "g"] * StringUtils.splitByLength("abcdefghij", 2, 4, 1) = ["ab", "cdef", "g"] * StringUtils.splitByLength("abcdefg", 2, 4, 5) = ["ab", "cdef", "g"] * StringUtils.splitByLength("abcdef", 2, 4, 1) = ["ab", "cdef", null] * * StringUtils.splitByLength(" abcdef", 2, 4, 1) = [" a", "bcde", "f"] * StringUtils.splitByLength("abcdef ", 2, 4, 1) = ["ab", "cdef", " "] * StringUtils.splitByLength("abcdefg", 2, 4, 0, 1) = ["ab", "cdef", "", "g"] * StringUtils.splitByLength("abcdefg", -1) = {@link IllegalArgumentException} * </pre> * * @param str the String to parse, may be null * @param lengths the string lengths where to cut, may be null, must not be negative * @return an array of splitted Strings, {@code null} if null String input * @throws IllegalArgumentException * if one of the lengths is negative */ public static String[] splitByLength(String str, int ... lengths); /** * <p>Split a String into an array, using an array of fixed string lengths repeated as * many times as necessary to reach the String end.</p> * * <p>If not null String input, the returned array size is a multiple of the input lengths array.</p> * * <p>A null input String returns {@code null}. * A {@code null} or empty input lengths array returns an empty array. * A {@code 0} in the input lengths array results in en empty string.</p> * * <p>All empty substrings other than zero length requested and following substrings, * are returned {@code null}.</p> * * <pre> * StringUtils.splitByLengthRepeated(null, *) = null * StringUtils.splitByLengthRepeated("abc") = [] * StringUtils.splitByLengthRepeated("abc", null) = [] * StringUtils.splitByLengthRepeated("abc", []) = [] * StringUtils.splitByLengthRepeated("", 2, 4, 1) = [null, null, null] * * StringUtils.splitByLengthRepeated("abcdefghij", 2, 3) = ["ab", "cde", "fg", "hij"] * StringUtils.splitByLengthRepeated("abcdefgh", 2, 3) = ["ab", "cde", "fg", "h"] * StringUtils.splitByLengthRepeated("abcdefg", 2, 3) = ["ab", "cde", "fg", null] * * StringUtils.splitByLengthRepeated(" abcdef", 2, 3) = [" a", "bcd", "ef", null] * StringUtils.splitByLengthRepeated("abcdef ", 2, 3) = ["ab", "cde", "f ", null] * StringUtils.splitByLengthRepeated("abcdef", 2, 3, 0, 1) = ["ab", "cde", "", "f"] * StringUtils.splitByLengthRepeated("abcdefg", 2, 3, 0, 1) = ["ab", "cde", "", "f", * "g", null, null, null] * StringUtils.splitByLengthRepeated("abcdefgh", 2, 0, 1, 0) = ["ab", "", "c", "", * "de", "", "f", "", * "gh", "", null, null] * StringUtils.splitByLengthRepeated("abcdefg", 2, 0, 1, 0) = ["ab", "", "c", "", * "de", "", "f", "", * "g", null, null, null] * StringUtils.splitByLengthRepeated("abcdefg", -1) = {@link IllegalArgumentException} * StringUtils.splitByLengthRepeated("abcdefg", 0, 0) = {@link IllegalArgumentException} * </pre> * * @param str the String to parse, may be null * @param lengths the string lengths where to cut, may be null, must not be negative * @return an array of splitted Strings, {@code null} if null String input * @throws IllegalArgumentException * if one of the lengths is negative or if lengths sum is less than 1 */ public static String[] splitByLengthRepeatedly(String str, int... lengths); {code} See PR #75 : https://github.com/apache/commons-lang/pull/75 was: Add methods to split a String by fixed lengths : {code:java} public static String[] splitByLength(String str, int ... lengths); public static String[] splitByLengthRepeatedly(String str, int ... lengths); {code} Detail : {code:java} /** * <p>Split a String into an array, using an array of fixed string lengths.</p> * * <p>If not null String input, the returned array size is same as the input lengths array.</p> * * <p>A null input String returns {@code null}. * A {@code null} or empty input lengths array returns an empty array. * A {@code 0} in the input lengths array results in en empty string.</p> * * <p>Extra characters are ignored (ie String length greater than sum of split lengths). * All empty substrings other than zero length requested, are returned {@code null}.</p> * * <pre> * StringUtils.splitByLength(null, *) = null * StringUtils.splitByLength("abc") = [] * StringUtils.splitByLength("abc", null) = [] * StringUtils.splitByLength("abc", []) = [] * StringUtils.splitByLength("", 2, 4, 1) = [null, null, null] * * StringUtils.splitByLength("abcdefg", 2, 4, 1) = ["ab", "cdef", "g"] * StringUtils.splitByLength("abcdefghij", 2, 4, 1) = ["ab", "cdef", "g"] * StringUtils.splitByLength("abcdefg", 2, 4, 5) = ["ab", "cdef", "g"] * StringUtils.splitByLength("abcdef", 2, 4, 1) = ["ab", "cdef", null] * * StringUtils.splitByLength(" abcdef", 2, 4, 1) = [" a", "bcde", "f"] * StringUtils.splitByLength("abcdef ", 2, 4, 1) = ["ab", "cdef", " "] * StringUtils.splitByLength("abcdefg", 2, 4, 0, 1) = ["ab", "cdef", "", "g"] * StringUtils.splitByLength("abcdefg", -1) = {@link IllegalArgumentException} * </pre> * * @param str the String to parse, may be null * @param lengths the string lengths where to cut, may be null, must not be negative * @return an array of splitted Strings, {@code null} if null String input * @throws IllegalArgumentException * if one of the lengths is negative */ public static String[] splitByLength(String str, int ... lengths); /** * <p>Split a String into an array, using an array of fixed string lengths repeated as * many times as necessary to reach the String end.</p> * * <p>If not null String input, the returned array size is a multiple of the input lengths array.</p> * * <p>A null input String returns {@code null}. * A {@code null} or empty input lengths array returns an empty array. * A {@code 0} in the input lengths array results in en empty string.</p> * * <p>All empty substrings other than zero length requested and following substrings, * are returned {@code null}.</p> * * <pre> * StringUtils.splitByLengthRepeated(null, *) = null * StringUtils.splitByLengthRepeated("abc") = [] * StringUtils.splitByLengthRepeated("abc", null) = [] * StringUtils.splitByLengthRepeated("abc", []) = [] * StringUtils.splitByLengthRepeated("", 2, 4, 1) = [null, null, null] * * StringUtils.splitByLengthRepeated("abcdefghij", 2, 3) = ["ab", "cde", "fg", "hij"] * StringUtils.splitByLengthRepeated("abcdefgh", 2, 3) = ["ab", "cde", "fg", "h"] * StringUtils.splitByLengthRepeated("abcdefg", 2, 3) = ["ab", "cde", "fg", null] * * StringUtils.splitByLengthRepeated(" abcdef", 2, 3) = [" a", "bcd", "ef", null] * StringUtils.splitByLengthRepeated("abcdef ", 2, 3) = ["ab", "cde", "f ", null] * StringUtils.splitByLengthRepeated("abcdef", 2, 3, 0, 1) = ["ab", "cde", "", "f"] * StringUtils.splitByLengthRepeated("abcdefg", 2, 3, 0, 1) = ["ab", "cde", "", "f", * "g", null, null, null] * StringUtils.splitByLengthRepeated("abcdefgh", 2, 0, 1, 0) = ["ab", "", "c", "", * "de", "", "f", "", * "gh", "", null, null] * StringUtils.splitByLengthRepeated("abcdefg", 2, 0, 1, 0) = ["ab", "", "c", "", * "de", "", "f", "", * "g", null, null, null] * StringUtils.splitByLengthRepeated("abcdefg", -1) = {@link IllegalArgumentException} * StringUtils.splitByLengthRepeated("abcdefg", 0, 0) = {@link IllegalArgumentException} * </pre> * * @param str the String to parse, may be null * @param lengths the string lengths where to cut, may be null, must not be negative * @return an array of splitted Strings, {@code null} if null String input * @throws IllegalArgumentException * if one of the lengths is negative or if lengths sum is less than 1 */ public static String[] splitByLengthRepeatedly(String str, int... lengths); {code} > Add split by length methods in StringUtils > ------------------------------------------ > > Key: LANG-1124 > URL: https://issues.apache.org/jira/browse/LANG-1124 > Project: Commons Lang > Issue Type: New Feature > Components: lang.* > Reporter: Loic Guibert > > Add methods to split a String by fixed lengths : > {code:java} > public static String[] splitByLength(String str, int ... lengths); > public static String[] splitByLengthRepeatedly(String str, int ... lengths); > {code} > Detail : > {code:java} > /** > * <p>Split a String into an array, using an array of fixed string > lengths.</p> > * > * <p>If not null String input, the returned array size is same as the input > lengths array.</p> > * > * <p>A null input String returns {@code null}. > * A {@code null} or empty input lengths array returns an empty array. > * A {@code 0} in the input lengths array results in en empty string.</p> > * > * <p>Extra characters are ignored (ie String length greater than sum of > split lengths). > * All empty substrings other than zero length requested, are returned {@code > null}.</p> > * > * <pre> > * StringUtils.splitByLength(null, *) = null > * StringUtils.splitByLength("abc") = [] > * StringUtils.splitByLength("abc", null) = [] > * StringUtils.splitByLength("abc", []) = [] > * StringUtils.splitByLength("", 2, 4, 1) = [null, null, null] > * > * StringUtils.splitByLength("abcdefg", 2, 4, 1) = ["ab", "cdef", "g"] > * StringUtils.splitByLength("abcdefghij", 2, 4, 1) = ["ab", "cdef", "g"] > * StringUtils.splitByLength("abcdefg", 2, 4, 5) = ["ab", "cdef", "g"] > * StringUtils.splitByLength("abcdef", 2, 4, 1) = ["ab", "cdef", null] > * > * StringUtils.splitByLength(" abcdef", 2, 4, 1) = [" a", "bcde", "f"] > * StringUtils.splitByLength("abcdef ", 2, 4, 1) = ["ab", "cdef", " "] > * StringUtils.splitByLength("abcdefg", 2, 4, 0, 1) = ["ab", "cdef", "", "g"] > * StringUtils.splitByLength("abcdefg", -1) = {@link > IllegalArgumentException} > * </pre> > * > * @param str the String to parse, may be null > * @param lengths the string lengths where to cut, may be null, must not be > negative > * @return an array of splitted Strings, {@code null} if null String input > * @throws IllegalArgumentException > * if one of the lengths is negative > */ > public static String[] splitByLength(String str, int ... lengths); > /** > * <p>Split a String into an array, using an array of fixed string lengths > repeated as > * many times as necessary to reach the String end.</p> > * > * <p>If not null String input, the returned array size is a multiple of the > input lengths array.</p> > * > * <p>A null input String returns {@code null}. > * A {@code null} or empty input lengths array returns an empty array. > * A {@code 0} in the input lengths array results in en empty string.</p> > * > * <p>All empty substrings other than zero length requested and following > substrings, > * are returned {@code null}.</p> > * > * <pre> > * StringUtils.splitByLengthRepeated(null, *) = null > * StringUtils.splitByLengthRepeated("abc") = [] > * StringUtils.splitByLengthRepeated("abc", null) = [] > * StringUtils.splitByLengthRepeated("abc", []) = [] > * StringUtils.splitByLengthRepeated("", 2, 4, 1) = [null, null, null] > * > * StringUtils.splitByLengthRepeated("abcdefghij", 2, 3) = ["ab", "cde", > "fg", "hij"] > * StringUtils.splitByLengthRepeated("abcdefgh", 2, 3) = ["ab", "cde", > "fg", "h"] > * StringUtils.splitByLengthRepeated("abcdefg", 2, 3) = ["ab", "cde", > "fg", null] > * > * StringUtils.splitByLengthRepeated(" abcdef", 2, 3) = [" a", "bcd", > "ef", null] > * StringUtils.splitByLengthRepeated("abcdef ", 2, 3) = ["ab", "cde", > "f ", null] > * StringUtils.splitByLengthRepeated("abcdef", 2, 3, 0, 1) = ["ab", "cde", > "", "f"] > * StringUtils.splitByLengthRepeated("abcdefg", 2, 3, 0, 1) = ["ab", "cde", > "", "f", > * "g", null, > null, null] > * StringUtils.splitByLengthRepeated("abcdefgh", 2, 0, 1, 0) = ["ab", "", > "c", "", > * "de", "", > "f", "", > * "gh", "", > null, null] > * StringUtils.splitByLengthRepeated("abcdefg", 2, 0, 1, 0) = ["ab", "", "c", > "", > * "de", "", > "f", "", > * "g", null, > null, null] > * StringUtils.splitByLengthRepeated("abcdefg", -1) = {@link > IllegalArgumentException} > * StringUtils.splitByLengthRepeated("abcdefg", 0, 0) = {@link > IllegalArgumentException} > * </pre> > * > * @param str the String to parse, may be null > * @param lengths the string lengths where to cut, may be null, must not be > negative > * @return an array of splitted Strings, {@code null} if null String input > * @throws IllegalArgumentException > * if one of the lengths is negative or if lengths sum is less > than 1 > */ > public static String[] splitByLengthRepeatedly(String str, int... lengths); > {code} > See PR #75 : https://github.com/apache/commons-lang/pull/75 -- This message was sent by Atlassian JIRA (v6.3.4#6332)