Hello Loic, welcome to the dev list!
2015-04-22 17:20 GMT+02:00 Loic Guibert <lfdummy-apa...@yahoo.fr>: > 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. > Nice that you've decided to contribute to the OSS ecosystem! > > 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. > The functionality you propose looks generally useful to me. However, I'm not sure if everything fits into StringUtils. > It's my first contribution, so how would you like it to be done ? > The first step is to sign a Contributor License Agreement [1]. It's not totally necessary for one time contributions, but it's good to have this kind of paper work done, if you decide to stay with us for longer ;o) > 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 > > Using GitHub for contributing is fine. Please read through our docs on how to contribute [2]. It will make applying your contribution easier. Also creating a PR per functional group will be better. Thanks! Benedikt [1] https://www.apache.org/dev/new-committers-guide.html#cla [2] https://github.com/apache/commons-lang/blob/trunk/CONTRIBUTING.md > > Best regards, > > -- > Loic Guibert > > > > --------------------------------------------------------------------- > 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