Hello,
I wrote a personal class "StringHelper" using the StringUtils class and
containing some classic routines.
I think those could be added to the StringUtils class.

There are some of these methods (JavaDoc is actually in French, so I
didn't include it here)  :
--------------------------------------------------------------------------------
    /**
     * StringHelper.abbreviate(null, *, *, *) = null
     * StringHelper.abbreviate("", 10, 2, 3)  = ""
     * StringHelper.abbreviate("0123456789ABCDEF", 16, 3, 2) =
"0123456789ABCDEF"
     * StringHelper.abbreviate("0123456789ABCDEF", 10, 3, 2) = "01234...EF"
     * StringHelper.abbreviate("Lorem ipsum dolor sit amet", 23, 6, 5) =
"Lorem ipsum dol... amet"
     * StringHelper.abbreviate("012345", 5, 0, 2)  => {@link
IllegalArgumentException}
     */
public static String abbreviate(String pString, int pMaxLength, int
pPrefixLength, int pSuffixLength);

    /**
     * StringHelper.abbreviate(null, null, null, *) = null
     * StringHelper.abbreviate("", null, null, *)   = ""
     * StringHelper.abbreviate(null, "", null, *)   = ""
     * StringHelper.abbreviate(null, null, "", *)   = ""
     * StringHelper.abbreviate("", "", "", 10)   = ""
     * StringHelper.abbreviate("a", "b", "c", 10)   = "abc"
     * StringHelper.abbreviate("012", "3456789ABCD", "EF", 16) =
"0123456789ABCDEF"
     * StringHelper.abbreviate("012", "3456789ABCD", "EF", 10) =
"01234...EF"
     * StringHelper.abbreviate("Lorem ", "ipsum dolor sit", " amet", 23)
= "Lorem ipsum dol... amet"
     * StringHelper.abbreviate("", "0123", "45", 5)  => {@link
IllegalArgumentException}
     */
public static String abbreviate(String pPrefix, String pString, String
pSuffix, int pMaxLength);


    /**
     * StringHelper.leftPadLeftCut(null, *, *, false)  = null
     * StringHelper.leftPadLeftCut(null, 3, 'z', true) = "zzz"
     * StringHelper.leftPadLeftCut("", 3, 'z', *)      = "zzz"
     * StringHelper.leftPadLeftCut("bat", 3, 'z', *)   = "bat"
     * StringHelper.leftPadLeftCut("bat", 5, 'z', *)   = "zzbat"
     * StringHelper.leftPadLeftCut("bat", 1, 'z', *)   = "t"
     * StringHelper.leftPadLeftCut("bat", -1, 'z', *)  = ""
     */
public static String leftPadLeftCut(String pString, int pFixedSize, char
pPadChar, boolean pNullAsEmpty);

    /**
     * StringHelper.leftPadRightCut(null, *, *, false)  = null
     * StringHelper.leftPadRightCut(null, 3, 'z', true) = "zzz"
     * StringHelper.leftPadRightCut("", 3, 'z', *)      = "zzz"
     * StringHelper.leftPadRightCut("bat", 3, 'z', *)   = "bat"
     * StringHelper.leftPadRightCut("bat", 5, 'z', *)   = "zzbat"
     * StringHelper.leftPadRightCut("bat", 1, 'z', *)   = "b"
     * StringHelper.leftPadRightCut("bat", -1, 'z', *)  = ""
     */
public static String leftPadRightCut(String pString, int pFixedSize,
char pPadChar, boolean pNullAsEmpty);

    /**
     * StringHelper.rightPadRightCut(null, *, *, false)  = null
     * StringHelper.rightPadRightCut(null, 3, 'z', true) = "zzz"
     * StringHelper.rightPadRightCut("", 3, 'z', *)      = "zzz"
     * StringHelper.rightPadRightCut("bat", 3, 'z', *)   = "bat"
     * StringHelper.rightPadRightCut("bat", 5, 'z', *)   = "batzz"
     * StringHelper.rightPadRightCut("bat", 1, 'z', *)   = "b"
     * StringHelper.rightPadRightCut("bat", -1, 'z', *)  = ""
     */
public static String rightPadRightCut(String pString, int pFixedSize,
char pPadChar, boolean pNullAsEmpty);

    /**
     * StringHelper.rightPadLeftCut(null, *, *, false)  = null
     * StringHelper.rightPadLeftCut(null, 3, 'z', true) = "zzz"
     * StringHelper.rightPadLeftCut("", 3, 'z', *)      = "zzz"
     * StringHelper.rightPadLeftCut("bat", 3, 'z', *)   = "bat"
     * StringHelper.rightPadLeftCut("bat", 5, 'z', *)   = "batzz"
     * StringHelper.rightPadLeftCut("bat", 1, 'z', *)   = "t"
     * StringHelper.rightPadLeftCut("bat", -1, 'z', *)  = ""
     */
public static String rightPadLeftCut(String pString, int pFixedSize,
char pPadChar, boolean pNullAsEmpty);


    /**
     * StringHelper.rotate(null, *)        = null
     * StringHelper.rotate("", *)          = ""
     * StringHelper.rotate("ABCDEFG", 0)   = "ABCDEF"
     * StringHelper.rotate("ABCDEFG", 2)   = "FGABCDE"
     * StringHelper.rotate("ABCDEFG", -2)  = "CDEFGAB"
     * StringHelper.rotate("ABCDEFG", 7)   = "ABCDEFG"
     * StringHelper.rotate("ABCDEFG", -7)  = "ABCDEFG"
     * StringHelper.rotate("ABCDEFG", 9)   = "FGABCDE"
     * StringHelper.rotate("ABCDEFG", -9)  = "CDEFGAB"
     */
public static String rotate(String pString, int pCount);


    /**
     * StringHelper.replaceAll(null, *, *) = null
     * StringHelper.replaceAll(*, null, *)  => {@link NullPointerException}
     * StringHelper.replaceAll(*, *, null)  => {@link NullPointerException}
     * StringHelper.replaceAll("", "", "abc")  = "abc"
     * StringHelper.replaceAll("", ".*", "abc")  = "abc"
     * StringHelper.replaceAll("", ".+", "abc")  = ""
     * StringHelper.replaceAll("ABCabc123", "[a-z]", "_") = "ABC___123"
     * StringHelper.replaceAll("ABCabc123", "[^A-Z0-9]+", "_") = "ABC_123"
     * StringHelper.replaceAll("ABCabc123", "[^A-Z0-9]+", "") = "ABC123"
     * StringHelper.replaceAll("Lorem ipsum  dolor   sit", "(
+)([a-z]+)", "_$2") = "Lorem_ipsum_dolor_sit"
     *
     * @see String#replaceAll(String, String)
     * @see java.util.regex.Pattern
     */
public static String replaceAll(String pString, String pRegex, String
pReplacement);

    /**
     * StringHelper.replaceFirst(null, *, *) = null
     * StringHelper.replaceFirst(*, null, *)  => {@link
NullPointerException}
     * StringHelper.replaceFirst(*, *, null)  => {@link
NullPointerException}
     * StringHelper.replaceFirst("", "", "abc")  = "abc"
     * StringHelper.replaceFirst("", ".*", "abc")  = "abc"
     * StringHelper.replaceFirst("", ".+", "abc")  = ""
     * StringHelper.replaceFirst("ABCabc123", "[a-z]", "_") = "ABC_bc123"
     * StringHelper.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "_") =
"ABC_123abc"
     * StringHelper.replaceFirst("ABCabc123abc", "[^A-Z0-9]+", "") =
"ABC123abc"
     * StringHelper.replaceFirst("Lorem ipsum  dolor   sit", "(
+)([a-z]+)", "_$2") = "Lorem_ipsum  dolor   sit"
     *
     * @see String#replaceFirst(String, String)
     * @see java.util.regex.Pattern
     */
public static String replaceFirst(String pString, String pRegex, String
pReplacement);


public static int compare(String pString1, String pString2);
public static int compareIgnoreCase(String pString1, String pString2);


    /**
     * @param pAlgorithm : MD5, SHA-1,... see {@link MessageDigest}
     * @throws NoSuchAlgorithmException -
     */
public static String hash(String pString, String pAlgorithm) throws
NoSuchAlgorithmException;
public static byte[] hashBytes(String pString, String pAlgorithm) throws
NoSuchAlgorithmException;


    /**
     * Convert a bytes array to an hexadecimal String represetation (big
endian)
     */
public static String toHexString(byte[] pBytes);


    /**
     * @return Integer or {@code null} if pString is empty
     */
public static Integer toIntegerEmpty(String pString);


    /**
     * StringHelper.splitByLength(null, *) = null
     * StringHelper.splitByLength("abc") = []
     * StringHelper.splitByLength("", 2, 4, 1)     = [null, null, null]
     * StringHelper.splitByLength("abcdefg", 2, 4, 1)  = ["ab", "cdef", "g"]
     * StringHelper.splitByLength("abcdefghij", 2, 4, 1)  = ["ab",
"cdef", "g"]
     * StringHelper.splitByLength("abcdef", 2, 4, 1)  = ["ab", "cdef", null]
     * StringHelper.splitByLength("abcdef ", 2, 4, 1)  = ["ab", "cdef", " "]
     * StringHelper.splitByLength(" abcdefg", 2, 4, 1)  = [" a", "bcde",
"f"]
     * StringHelper.splitByLength("abcdefg", 2, 4, 0, 1)  = ["ab",
"cdef", null, "g"]
     *
     * @return String[] or {@code null} if <code>pString == null</code>
     */
public static String[] splitByLength(String pString, int ... pColLengths);


    /**
     * Return {@link Matcher} from <code>pRegex.matcher(pString)</code>
     * @return {@link Matcher} ou <code>null</code>
     */
public static Matcher matcher(CharSequence pString, Pattern pRegex);

    /**
     * Return {@link Matcher} from
<code>Pattern.compile(pRegex).matcher(pString)</code>
     * @return {@link Matcher} ou <code>null</code>
     */
public static Matcher matcher(CharSequence pString, String pRegex);

public static boolean matches(CharSequence pString, Pattern pRegex);
public static boolean matches(CharSequence pString, String pRegex);
--------------------------------------------------------------------------------

I will rename parameters and add final qualifier to respect your coding
practices.
I will translate the JavaDoc and comments in English.

If you are interested, I can add those to StringUtils (and associated
test cases) in my github repository.
It's my first contribution, so how would you like it to be done ?
    1- make a JIRA ticket by logical group of methods and related git
pull request
    2- make a single detailed JIRA ticket with all methods and a single
git pull request with one commit by logical group of methods



Best regards,

-- 
Loic Guibert



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to