commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Loic Guibert <lfdummy-apa...@yahoo.fr>
Subject [LANG] Adding StringUtils split by length methods
Date Thu, 30 Apr 2015 08:08:19 GMT
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-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message