diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 4af966e52bf..cbadf145a95 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -9245,5 +9245,25 @@ public static int[] toCodePoints(CharSequence str) { index += Character.charCount(result[i]); } return result; + } + + /** + *

Finds index of all the occurences of given search key found in source string. + *

+ * @param source + * @param searchKey + * @return list of integer of indexes. + */ + public static List indexesOf(final CharSequence source, final Character searchKey) { + if(isEmpty(source) || searchKey == CharUtils.NUL ) { + return null; + } + List indexList = new ArrayList<>(); + for(int i = 0 ; i < source.length() ; i++) { + if(searchKey.equals(source.charAt(i))) { + indexList.add(i); + } + } + return indexList; } } diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index 615030eccc4..d765ecb9e03 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -19,6 +19,7 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; @@ -3229,6 +3230,14 @@ public void testToCodePoints() throws Exception { assertNull(StringUtils.toCodePoints(null)); assertArrayEquals(ArrayUtils.EMPTY_INT_ARRAY, StringUtils.toCodePoints("")); } + + @Test + public void testIndexesOf() throws Exception { + assertEquals(null, 3, StringUtils.indexesOf("anagram", 'a').size()); + assertEquals(null, 2, StringUtils.indexesOf("Reader", 'e').size()); + assertNull(StringUtils.indexesOf("people", null)); + assertNotEquals(null, 2, StringUtils.indexesOf("Automatic", 'o').size()); + } @Test public void testGetDigits() {