On Fri, Feb 23, 2018 at 10:05 AM, Gary Gregory <garydgreg...@gmail.com> wrote:
> > > On Fri, Feb 23, 2018 at 10:04 AM, Gary Gregory <garydgreg...@gmail.com> > wrote: > >> >> >> On Fri, Feb 23, 2018 at 7:03 AM, Matt Benson <mben...@apache.org> wrote: >> >>> On Feb 23, 2018 4:26 AM, "sebb" <seb...@gmail.com> wrote: >>> >>> On 23 February 2018 at 00:41, Gary Gregory <garydgreg...@gmail.com> >>> wrote: >>> > On Thu, Feb 22, 2018 at 4:27 PM, sebb <seb...@gmail.com> wrote: >>> > >>> >> On 22 February 2018 at 23:15, Gary Gregory <garydgreg...@gmail.com> >>> wrote: >>> >> > On Thu, Feb 22, 2018 at 4:11 PM, sebb <seb...@gmail.com> wrote: >>> >> > >>> >> >> On 22 February 2018 at 22:27, Gary Gregory <garydgreg...@gmail.com >>> > >>> >> wrote: >>> >> >> > Use your imagination ;-) >>> >> >> >>> >> >> What would the new code look like? >>> >> >>> >> I mean the user code before and after the enum is introduced. >>> >> >>> > >>> > I don't have code for the _before_ since I wrote the enum to avoid it. >>> > >>> > I have a different util class that gets called like this: >>> > >>> > HexDump(byte[] data, LetterCase letterCase, more details...) >>> >>> The above is only using the enum as a way to provide the requested >>> type of transform. >>> >>> The important bit is the code that uses the enum to do the transform. >>> >>> >>> Obviously the method body would call #toCaseString() passing a String and >>> Locale as arguments. This question feels like trolling, as does the >>> insinuation that true/false *might not* be less clear in intent than >>> UPPER/LOWER, or vice versa as, again, we don't know what the hypothetical >>> API author was thinking in the case of boolean. WTH >>> >> >> Thanks Matt for pointing that out. The comment did feel trollish to me as >> well but I choose not to engage. Aside from that I really like Sebb's >> contributions to our community, his diligence and attention to detail. >> I did not think I needed to make some pedantic point about an enum being >> much better than a boolean to express letter case or toggles in general. >> >> >>> The comment about Java 8 is fine as far as it goes, but doesn't really >>> invalidate this as the method supplied can easily be used as a >>> BiFunction. >>> Gary, I'm thinking you might as well "underload" the method to pass the >>> default Locale to the two-argument variant so then you also implement >>> Function in the simple case. Then I'm sold. For a bonus you might provide >>> char method variants as well. >>> >> >> OK, sounds good. Like this then: >> [https://pastebin.com/mJw2tDHj] >> > > Without the @author tag of course. > There is also CharBuffer... I only have use for String. Gary > > G > >> >> import java.util.Locale; >> >> /** >> * Enumerates letter cases and converts strings. >> * >> * @author <a href="mailto:ggreg...@rocketsoftware.com">Gary Gregory</a> >> */ >> public enum LetterCase { >> >> LOWER { >> @Override >> public char[] toCaseString(final char[] source, final Locale >> locale) { >> return String.valueOf(source).toLower >> Case(locale).toCharArray(); >> } >> >> @Override >> public String toCaseString(final String source, final Locale >> locale) { >> return source.toLowerCase(locale); >> } >> >> }, >> UPPER { >> @Override >> public char[] toCaseString(final char[] source, final Locale >> locale) { >> return String.valueOf(source).toUpper >> Case(locale).toCharArray(); >> } >> >> @Override >> public String toCaseString(final String source, final Locale >> locale) { >> return source.toUpperCase(locale); >> } >> }; >> >> /** >> * Converts from the given {@code source} string to the case >> specified by this enum using the default {@code locale}. >> * >> * @param source >> * the string to convert >> * @param locale >> * the locale to use for conversion. >> * @return a converted string. >> */ >> public char[] toCaseString(final char[] source) { >> return toCaseString(source, Locale.getDefault()); >> } >> >> /** >> * Converts from the given {@code source} char[] to the case >> specified by this enum using the given {@code locale}. >> * >> * @param source >> * the char[] to convert >> * @param locale >> * the locale to use for conversion. >> * @return a converted char[]. >> */ >> public abstract char[] toCaseString(char[] source, Locale locale); >> >> /** >> * Converts from the given {@code source} string to the case >> specified by this enum using the default {@code locale}. >> * >> * @param source >> * the string to convert >> * @param locale >> * the locale to use for conversion. >> * @return a converted string. >> */ >> public String toCaseString(final String source) { >> return toCaseString(source, Locale.getDefault()); >> } >> >> /** >> * Converts from the given {@code source} string to the case >> specified by this enum using the given {@code locale}. >> * >> * @param source >> * the string to convert >> * @param locale >> * the locale to use for conversion. >> * @return a converted string. >> */ >> public abstract String toCaseString(String source, Locale locale); >> >> } >> >> Gary >> >> >>> Matt >>> >>> >>> > This is much clearer than using a boolean for the letter case. >>> >>> YMMV >>> >>> > Gary >>> > >>> > >>> >> >>> >> >> >>> >> > >>> >> > I posted the code at the start of this thread... >>> >> > >>> >> > Gary >>> >> > >>> >> > >>> >> >> >>> >> >> How does it compare with code that does not have the enum? >>> >> >> >>> >> >> > I use it in the following contexts: >>> >> >> > - To pass to a hex dump method to configure where the alpha chars >>> >> should >>> >> >> be >>> >> >> > in lower case or upper case. >>> >> >> > - To configure a parameterized JUnit test class to configure the >>> case >>> >> of >>> >> >> > HTTP headers and values. >>> >> >> > - To normalize input >>> >> >> > >>> >> >> > Gary >>> >> >> > >>> >> >> > >>> >> >> > On Thu, Feb 22, 2018 at 3:14 PM, Otto Fowler < >>> ottobackwa...@gmail.com >>> >> > >>> >> >> > wrote: >>> >> >> > >>> >> >> >> What problem does it solve? >>> >> >> >> >>> >> >> >> On February 22, 2018 at 17:02:34, Gary Gregory ( >>> >> garydgreg...@gmail.com) >>> >> >> >> wrote: >>> >> >> >> >>> >> >> >> Does anyone think this is useful and general enough to add to >>> Commons >>> >> >> >> Text: >>> >> >> >> >>> >> >> >> /** >>> >> >> >> * Enumerates letter cases and converts strings. >>> >> >> >> * >>> >> >> >> * @author <a href="mailto:ggreg...@rocketsoftware.com">Gary >>> >> Gregory</a> >>> >> >> >> */ >>> >> >> >> public enum LetterCase { >>> >> >> >> LOWER { >>> >> >> >> @Override >>> >> >> >> public String toCaseString(final String source, final Locale >>> >> >> >> locale) { >>> >> >> >> return source.toLowerCase(locale); >>> >> >> >> } >>> >> >> >> >>> >> >> >> }, >>> >> >> >> UPPER { >>> >> >> >> @Override >>> >> >> >> public String toCaseString(final String source, final Locale >>> >> >> >> locale) { >>> >> >> >> return source.toUpperCase(locale); >>> >> >> >> } >>> >> >> >> }; >>> >> >> >> >>> >> >> >> /** >>> >> >> >> * Converts from the given {@code source} string to the case >>> specified >>> >> >> >> by this enum using the given {@code locale}. >>> >> >> >> * >>> >> >> >> * @param source >>> >> >> >> * the string to convert >>> >> >> >> * @param locale >>> >> >> >> * the locale to use for conversion. >>> >> >> >> * @return a converted string. >>> >> >> >> */ >>> >> >> >> public abstract String toCaseString(String source, Locale >>> locale); >>> >> >> >> } >>> >> >> >> >>> >> >> >> ? >>> >> >> >> >>> >> >> >> Thank you, >>> >> >> >> Gary >>> >> >> >> >>> >> >> >> >>> >> >> >>> >> >> ------------------------------------------------------------ >>> --------- >>> >> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> >> >> For additional commands, e-mail: dev-h...@commons.apache.org >>> >> >> >>> >> >> >>> >> >>> >> --------------------------------------------------------------------- >>> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> >> For additional commands, e-mail: dev-h...@commons.apache.org >>> >> >>> >> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >> >> >