Hey Loic,

thank you for this proposal. I'll have a look at it this Sunday!

Benedikt

2015-04-30 10:08 GMT+02:00 Loic Guibert <lfdummy-apa...@yahoo.fr>:

> Hello,
> I've implemented 2 methods to split a String by fixed lengths :
>   - public static String[] splitByLength(String str, int ... lengths)
>   - public static String[] splitByLengthRepeatedly(String str, int ...
> lengths)
>
> I'll open a JIRA ticket and an associated Pull Request to add those
> methods in StringUtils.
>
>
> There is detail :
>
>     /**
>      * <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);
>
> --
> Loic Guibert
> PGP : 0x65EB4F33
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>


-- 
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter

Reply via email to