diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index 5b73a42..9bf7fec 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -1011,6 +1011,18 @@ public abstract class Strman { return last(value, value.length() - 1); } + /** + * Decamelize String + * + * @param value The input String + * @return String decamelized. + */ + public static String toDecamelize(final String value, final String chr) { + String camelCasedString = toCamelCase(value); + String[] words = camelCasedString.split("(?=\\p{Upper})"); + return Arrays.stream(words).map(w -> w.toLowerCase()).collect(joining(Optional.ofNullable(chr).orElse(" "))); + } + public static String decode(final String value, final int digits, final int radix) { validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); return Arrays diff --git a/src/test/java/strman/StrmanTest.java b/src/test/java/strman/StrmanTest.java index 648cfe9..f5e0d0d 100644 --- a/src/test/java/strman/StrmanTest.java +++ b/src/test/java/strman/StrmanTest.java @@ -740,4 +740,10 @@ public class StrmanTest { assertThat(toCamelCase("c"), equalTo("c")); } + + @Test + public void toDeCamelCase_shouldDeCamelCaseAString() throws Exception { + assertThat(toDecamelize("camelCase", null), equalTo("camel case")); + assertThat(toDecamelize("camelCase", "_"), equalTo("camel_case")); + } } \ No newline at end of file