Skip to content

Commit

Permalink
Add startCase function (#94)
Browse files Browse the repository at this point in the history
  • Loading branch information
engfragui authored and shekhargulati committed Oct 19, 2017
1 parent 7b552eb commit befff26
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/main/java/strman/Strman.java
Original file line number Diff line number Diff line change
Expand Up @@ -1404,6 +1404,21 @@ public static String[] chop(String input, int step) {
.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());
Expand Down
18 changes: 18 additions & 0 deletions src/test/java/strman/StrmanTests.java
Original file line number Diff line number Diff line change
Expand Up @@ -1186,4 +1186,22 @@ public void chop_shouldChopStringByStep() throws Exception {
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"));
}
}

0 comments on commit befff26

Please sign in to comment.