From 6bbcb5313842bb28c49041a28ed2ff594848ef9d Mon Sep 17 00:00:00 2001 From: Andy Deese Date: Sat, 20 May 2017 12:01:13 -0400 Subject: [PATCH] Added underscored method with tests and documentation --- README.md | 10 ++++++++++ src/main/java/strman/Strman.java | 28 +++++++++++++++++++++++++++- src/test/java/strman/StrmanTest.java | 16 ++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9bca612..ba9bd6d 100644 --- a/README.md +++ b/README.md @@ -631,6 +631,16 @@ isBlank("test") // result => false) ``` +## underscored + +underscored returns a string that represents the passed in string in all lowercase and underscores +between words. + +```java +underscored("MozTransform") +// result => "moz_transform") +``` + ## Inspiration This library is inspired by [dleitee/strman](https://github.com/dleitee/strman). diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index 8f2eaa1..65ea031 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -1310,12 +1310,38 @@ public abstract class Strman { * Checks if string is empty. This is a null safe check and will return true when string is null. * * @param input The input string - * @return true if string is null or empty + * @return true if input string is null or empty */ public static boolean isBlank(String input) { return input == null || input.isEmpty(); } + /** + * Changes passed in string to all lower case and adds underscore between words. + * + * @param input The input string + * @return the input string in all lower case with underscores between words + */ + public static String underscored(String input) { + String result = null; + if (input != null) { + StringBuffer resultBuffer = new StringBuffer(); + char[] inputArray = input.toCharArray(); + for(int i = 0; i < inputArray.length; i++) { + char nextChar = inputArray[i]; + if (Character.isUpperCase(nextChar)) { + //start new word + if (resultBuffer.length() != 0) { + resultBuffer.append("_"); + } + } + resultBuffer.append(nextChar); + } + result = resultBuffer.toString().toLowerCase(); + } + return result; + } + private static void validate(String value, Predicate predicate, final Supplier supplier) { if (predicate.test(value)) { throw new IllegalArgumentException(supplier.get()); diff --git a/src/test/java/strman/StrmanTest.java b/src/test/java/strman/StrmanTest.java index 328b962..9e640c2 100644 --- a/src/test/java/strman/StrmanTest.java +++ b/src/test/java/strman/StrmanTest.java @@ -1040,4 +1040,20 @@ public class StrmanTest { public void isBlank_shouldReturnFalseIfNotEmpty() { assertFalse(isBlank("ac")); } + + @Test + public void underscored_shouldReturnUnderscoredString() { + assertThat(underscored("MozTransform"), equalTo("moz_transform")); + } + + @Test + public void underscored_shouldReturnEmptyStringIfEmptyStringPassedIn() { + assertThat(underscored(""), equalTo("")); + } + + @Test + public void underscored_shouldReturnNullIfNullPassedIn() { + assertThat(underscored(null), equalTo(null)); + } + } \ No newline at end of file