From 169404c7957a1378dcb9d1791a1af6b477b8385f Mon Sep 17 00:00:00 2001 From: Shekhar Gulati Date: Tue, 17 May 2016 18:50:27 +0530 Subject: [PATCH] Added support for `ensureRight` --- src/main/java/strman/Strman.java | 19 +++++++++++++++++++ src/test/java/strman/StrmanTest.java | 8 ++++++++ 2 files changed, 27 insertions(+) diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index e773aae..516b9d3 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -370,6 +370,25 @@ public abstract class Strman { return value.chars().mapToObj(ch -> leftPad(Integer.toString(ch), "0", 5)).collect(joining()); } + /** + * Ensures that the value ends with suffix. If it doesn't, it's appended. + * + * @param value The input String + * @param suffix The substr to be ensured to be right + * @param caseSensitive Use case (in-)sensitive matching for determining if value already ends with suffix + * @return + */ + public static String ensureRight(final String value, final String suffix, boolean caseSensitive) { + validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); + boolean endsWith; + if (caseSensitive) { + endsWith = value.endsWith(suffix); + } else { + endsWith = value.toLowerCase().endsWith(suffix.toLowerCase()); + } + return endsWith ? value : append(value, suffix); + } + public static String leftPad(final String value, final String pad, final int length) { validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); if (value.length() >= length) { diff --git a/src/test/java/strman/StrmanTest.java b/src/test/java/strman/StrmanTest.java index bf091ff..eb6e75e 100644 --- a/src/test/java/strman/StrmanTest.java +++ b/src/test/java/strman/StrmanTest.java @@ -4,8 +4,11 @@ import org.junit.Test; import java.util.Arrays; import java.util.Optional; +import java.util.stream.Stream; +import static java.util.stream.Collectors.toList; import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.collection.IsArrayContainingInOrder.arrayContaining; import static org.junit.Assert.*; import static strman.Strman.*; @@ -298,6 +301,11 @@ public class StrmanTest { assertThat(decEncode("A"), equalTo("00065")); assertThat(decEncode("Á"), equalTo("00193")); assertThat(decEncode("AA"), equalTo("0006500065")); + } + @Test + public void ensureRight_shouldEnsureStringEndsWithBar() throws Exception { + assertThat(Stream.of("foo", "foobar", "fooBAR").map(el -> ensureRight(el, "bar", false)).collect(toList()), hasItems("foobar", "foobar", "fooBAR")); + assertThat(Stream.of("foo", "foobar", "fooBAR").map(el -> ensureRight(el, "bar", true)).collect(toList()), hasItems("foobar", "foobar", "fooBARbar")); } } \ No newline at end of file