diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index 099a644..56d948b 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -1222,6 +1222,37 @@ public abstract class Strman { .get(); } + /** + * Removes leading whitespace from string. + * + * @param input The string to trim. + * @return Returns the trimmed string. + */ + public static Optional trimStart(final String input) { + return Optional.ofNullable(input) + .filter(v -> !v.isEmpty()) + .map(Strman::leftTrim); + } + + + /** + * Removes leading whitespace from string. + * + * @param input The string to trim. + * @param chars The characters to trim. + * + * @return Returns the trimmed string. + */ + public static Optional trimStart(final String input, String... chars) { + return Optional.ofNullable(input) + .filter(v -> !v.isEmpty()) + .map(v -> { + String pattern = String.format("^[%s]+", join(chars, "\\")); + return v.replaceAll(pattern, ""); + }); + } + + 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 5af5171..e19ef00 100644 --- a/src/test/java/strman/StrmanTest.java +++ b/src/test/java/strman/StrmanTest.java @@ -958,4 +958,20 @@ public class StrmanTest { public void upperFirst_shouldReturnSameStringIfFirstCharIsUpperCase() throws Exception { assertThat(upperFirst("FRED"), is("FRED")); } + + @Test + public void trimStart_shouldRemoveAllWhitespaceAtStart() throws Exception { + assertThat(trimStart(" abc "), is(Optional.of("abc "))); + assertThat(trimStart("abc "), is(Optional.of("abc "))); + assertThat(trimStart("abc"), is(Optional.of("abc"))); + assertThat(trimStart(""), is(Optional.empty())); + assertThat(trimStart(null), is(Optional.empty())); + } + + @Test + public void trimStart_shouldRemoveSpecialCharactersAtStart() throws Exception { + assertThat(trimStart("-_-abc-_-", "_", "-"), is(Optional.of("abc-_-"))); + assertThat(trimStart("-_-!abc-_-", "_", "-", "!"), is(Optional.of("abc-_-"))); + assertThat(trimStart("-_-#abc-_-", "_", "-", "!", "#"), is(Optional.of("abc-_-"))); + } } \ No newline at end of file