From 9b3257e4d1a63e0a4d971a331eaf7b9a08d98040 Mon Sep 17 00:00:00 2001 From: Arshad Basha Date: Tue, 3 Jan 2017 00:14:33 +0530 Subject: [PATCH] LANG-1307: Added getDigits method to StringUtils (closes #225) --- .../org/apache/commons/lang3/StringUtils.java | 36 +++++++++++++++++++ .../apache/commons/lang3/StringUtilsTest.java | 11 ++++++ 2 files changed, 47 insertions(+) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index bd660bcce..6ab111810 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -7156,6 +7156,42 @@ public static boolean isNumericSpace(final CharSequence cs) { return true; } + /** + *

Checks if a String {@code str} contains Unicode digits, + * if yes then concatenate all the digits in {@code str} and return it as a String.

+ * + *

An empty ("") String will be returned if no digits found in {@code str}.

+ * + *
+     * StringUtils.getDigits(null)  = null
+     * StringUtils.getDigits("")    = ""
+     * StringUtils.getDigits("abc") = ""
+     * StringUtils.getDigits("1000$") = "1000"
+     * StringUtils.getDigits("1123~45") = "12345"
+     * StringUtils.getDigits("(541) 754-3010") = "5417543010"
+     * StringUtils.getDigits("\u0967\u0968\u0969") = "\u0967\u0968\u0969"
+     * 
+ * + * @param str the String to extract digits from, may be null + * @return String with only digits, + * or an empty ("") String if no digits found, + * or {@code null} String if {@code str} is null + */ + public static String getDigits(final String str) { + if (isEmpty(str)) { + return str; + } + final int sz = str.length(); + final StringBuilder strDigits = new StringBuilder(sz); + for (int i = 0; i < sz; i++) { + final char tempChar = str.charAt(i); + if (Character.isDigit(tempChar)) { + strDigits.append(tempChar); + } + } + return strDigits.toString(); + } + /** *

Checks if the CharSequence contains only whitespace.

* diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index b776b3be4..3051b478d 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -3206,4 +3206,15 @@ public void testToCodePoints() throws Exception { assertNull(StringUtils.toCodePoints(null)); assertArrayEquals(ArrayUtils.EMPTY_INT_ARRAY, StringUtils.toCodePoints("")); } + + @Test + public void testGetDigits() { + assertEquals(null, StringUtils.getDigits(null)); + assertEquals("", StringUtils.getDigits("")); + assertEquals("", StringUtils.getDigits("abc")); + assertEquals("1000", StringUtils.getDigits("1000$")); + assertEquals("12345", StringUtils.getDigits("123password45")); + assertEquals("5417543010", StringUtils.getDigits("(541) 754-3010")); + assertEquals("\u0967\u0968\u0969", StringUtils.getDigits("\u0967\u0968\u0969")); + } }