Add startCase function (#94)

This commit is contained in:
Francesca Guiducci
2017-10-20 01:12:13 +05:30
committed by Shekhar Gulati
parent 7b552eb25b
commit befff2625b
2 changed files with 33 additions and 0 deletions
+15
View File
@@ -1404,6 +1404,21 @@ public abstract class Strman {
.toArray(String[]::new);
}
/**
* Converts a String into its Start Case version
* https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage
*
* @param input The input String
* @return Start Case String
*/
public static String startCase(final String input) {
validate(input, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER);
// split into a word when we encounter a space, or an underscore, or a dash, or a switch from lower to upper case
String[] words = words(input, "\\s|_|-|(?<=[a-z])(?=[A-Z])");
return Arrays.stream(words).filter(w -> !w.trim().isEmpty())
.map(w -> upperFirst(w.toLowerCase())).collect(joining(" "));
}
private static void validate(String value, Predicate<String> predicate, final Supplier<String> supplier) {
if (predicate.test(value)) {
throw new IllegalArgumentException(supplier.get());
+18
View File
@@ -1186,4 +1186,22 @@ public class StrmanTests {
assertThat(chop("whitespace", 3).length, equalTo(4));
assertThat(chop("whitespace", 0)[0].length(), equalTo(10));
}
@Test(expected = IllegalArgumentException.class)
public void startCase_shouldThrowException() throws Exception {
startCase(null);
}
@Test
public void startCase_shouldStartCaseInputString() throws Exception {
assertThat(startCase(""), equalTo(""));
assertThat(startCase("ALL CAPS"), equalTo("All Caps"));
assertThat(startCase("camelCase"), equalTo("Camel Case"));
assertThat(startCase("kebab-case"), equalTo("Kebab Case"));
assertThat(startCase("Snake_case"), equalTo("Snake Case"));
assertThat(startCase(" spaces "), equalTo("Spaces"));
assertThat(startCase("spaces between words"), equalTo("Spaces Between Words"));
assertThat(startCase("--dashes--"), equalTo("Dashes"));
assertThat(startCase("dashes----between----words"), equalTo("Dashes Between Words"));
}
}