From e6d4baa0b8d331a512e0925e4573766b32be73c3 Mon Sep 17 00:00:00 2001 From: Shekhar Gulati Date: Tue, 3 May 2016 20:05:19 +0530 Subject: [PATCH] Added `at` function --- README.md | 12 +++++++++++- src/main/java/strman/Strman.java | 23 ++++++++++++++++++++++- src/test/java/strman/StrmanTest.java | 14 ++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c3b4214..94aa561 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ strman-java ------ -A Java string manipulation library without any dependencies. It is inspired by [dleitee/strman](https://github.com/dleitee/strman). +A Java 8 string manipulation library without any dependencies. It is inspired by [dleitee/strman](https://github.com/dleitee/strman). ## Available Functions @@ -31,4 +31,14 @@ import static strman.Strman.appendArray; String title = "s"; String result = appendArray(title, new String[]{"tr","m","an"}); // result = "strman" +``` + +## at(value, index) + +Gets the character at index. + +```java +import static strman.Strman.at; +String result = at("foobar", 0); +// result = "f" ``` \ No newline at end of file diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index 35291ca..2e3c762 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -1,5 +1,6 @@ package strman; +import java.util.Optional; import java.util.StringJoiner; /** @@ -26,7 +27,7 @@ public interface Strman { * @param appends an array of strings to append * @return full String */ - static String appendArray(String value, String[] appends) { + static String appendArray(final String value, final String[] appends) { if (value == null) { throw new IllegalArgumentException("'value' should be not null."); } @@ -39,4 +40,24 @@ public interface Strman { } return value + joiner.toString(); } + + /** + * Get the character at index. This method will take care of negative indexes. + * The valid value of index is between -(length-1) to (length-1). + * For values which don't fall under this range Optional.empty will be returned. + * + * @param value input value + * @param index location + * @return an Optional String if found else empty + */ + static Optional at(final String value, int index) { + if (value == null || value.isEmpty()) { + return Optional.empty(); + } + int length = value.length(); + if (index < 0) { + index = length + index; + } + return (index < length && index >= 0) ? Optional.of(String.valueOf(value.charAt(index))) : Optional.empty(); + } } diff --git a/src/test/java/strman/StrmanTest.java b/src/test/java/strman/StrmanTest.java index 60e52e2..431a2de 100644 --- a/src/test/java/strman/StrmanTest.java +++ b/src/test/java/strman/StrmanTest.java @@ -2,10 +2,13 @@ package strman; import org.junit.Test; +import java.util.Optional; + import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; import static strman.Strman.append; import static strman.Strman.appendArray; +import static strman.Strman.at; public class StrmanTest { @@ -28,11 +31,18 @@ public class StrmanTest { assertThat(appendArray("", new String[]{"foobar"}), equalTo("foobar")); } - @Test(expected = IllegalArgumentException.class) public void appendArrayShouldThrowIllegalArgumentExceptionWhenValueIsNull() throws Exception { appendArray(null, new String[]{}); } - + @Test + public void shouldFindCharacterAtIndex() throws Exception { + assertThat(at("foobar", 0), equalTo(Optional.of("f"))); + assertThat(at("foobar", 1), equalTo(Optional.of("o"))); + assertThat(at("foobar", -1), equalTo(Optional.of("r"))); + assertThat(at("foobar", -2), equalTo(Optional.of("a"))); + assertThat(at("foobar", 10), equalTo(Optional.empty())); + assertThat(at("foobar", -10), equalTo(Optional.empty())); + } } \ No newline at end of file