[ 
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)

Reply via email to