A little Java class to capitalize strings like text-transform in CSS
- pt-br
- en-us, only how to use
Em uma conversa com O Bermuda, ele disse que não havia uma anotação ou um método em StringUtils no Spring que fizesse com que "A Primeira Letra De Cada Palavra Fosse Maiúscula", o que é conhecido por capitalize. Como vim de frontend, isso era algo banal, pois em CSS temos o 'text-transform: capitalize' e pensei que era algo comum em quaisquer linguagens ou frameworks.
Para a surpresa, a biblioteca StringUtils possui um método capitalize que apenas transforma apenas o primeiro caractere para maiúsculo, o que não nos é útil para o seguinte problema:
Arrumar nomes para a inserção no banco de dados: fulano da silva sauro => deve virar => Fulano da Silva Sauro
Como em iniciei um projeto para geração de relatórios em testes de segurança e era necessário o nome, eu já havia feito algo para resolver o problema e passei ao meu amigo O Bermuda. Por influência dele, tentei reescrever o código usando Lambda Expression e classe Optional para validar o tão temido NullPointerException, mas... O código com Lambda Expression ficou mais lento do que a maneira antiga e eu 're re'escrevi o código, conseguindo performance equivalente ou superior a forma antiga. E agora vou testar diversos nomes afim de descobrir a melhor implementação
String nomeCompleto = "fuLaNO Costa E Pinto da siLva lIMA de Beltrano";
System.out.println(Capitalize.capitalizeByWords(nomeCompleto));
// Fulano Costa E Pinto Da Silva Lima De Beltrano
// Putz cara, não é isso que eu quero, olha o Da, De, E que coisa feia...
System.out.println(Capitalize.brazillianCapitalize(nomeCompleto));
// Fulano Costa e Pinto da Silva Lima de Beltrano
// Agora sim, Selo Hipster de Qualidade
To use Capitalize methods, only add the dependency on your project and write some code. Capitalize have five methods (for hour) to capitalize your strings:
Warning: All simbols, except '.' (dot) are convert to *Case in methods. This warning is because the files have extension, and dot broke the chain of string in Sneak, Slug and CamelCase
- Capitalize.capitalizeByWords(String): This method capitalize every word in String, splitting by tab(\t) and space(" "). I decide create this method to fix brazilian names, because the names on web forms are scary, but this method don't resolve all cases in brazilian names
String nomeCompleto = "fuLaNO Costa E Pinto da siLva lIMA de Beltrano";
System.out.println(Capitalize.capitalizeByWords(nomeCompleto));
// Fulano Costa E Pinto Da Silva Lima De Beltrano
- Capitalize.brazilianCapitalize(String): The same case of capitalizeByWords, but replace some cases of 'conectores' (connectors in english) to correctly way:
String nomeCompleto = "fuLaNO Costa E Pinto da siLva lIMA de Beltrano";
System.out.println(Capitalize.brazillianCapitalize(nomeCompleto));
// Fulano Costa e Pinto da Silva Lima de Beltrano
- Capitalize.toPascalCase(String): I don't research much to .*Case, but I know this .*Case as PascalCase. The first letter of all words are capitalize and spaces and simbols are converted to none(""):
String name = "FULANO DA SILVA SAURO de moura";
System.out.println(Capitalize.toPascalCase(name))
// FulanoDaSilvaSauroDeMoura
- Capitalize.toCamelCase(String): Same warn of toPascalCase. Only first word of string are not capitalized.
String name = "FULANO DA SILVA SAURO de moura";
System.out.println(Capitalize.toPascalCase(name))
// fulanoDaSilvaSauroDeMoura
- Capitalize.toSneakCase(String): Same warn of toPascalCase. Convert spaces, simbols and other cases do sneak_case.
String name = "FULANO DA SILVA SAURO de moura";
System.out.println(Capitalize.toPascalCase(name))
// fulano_da_silva_sauro_de_moura
- Capitalize.toSlugCase(String): Same warn of toPascalCase. Convert spaces, simbols and other cases do slug-case.
String name = "FULANO DA SILVA SAURO de moura";
System.out.println(Capitalize.toPascalCase(name))
// fulano-da-silva-sauro-de-moura