From 66adbd5d79ab39cfa752b674129e730171be0975 Mon Sep 17 00:00:00 2001 From: abhisripathi Date: Mon, 26 May 2025 02:28:21 -0700 Subject: [PATCH 1/4] Add countUpperCaseLetters method to StringUtils with Javadoc and unit tests --- .../org/apache/commons/lang3/StringUtils.java | 30 +++++++++++++++++++ .../apache/commons/lang3/StringUtilsTest.java | 13 ++++++++ 2 files changed, 43 insertions(+) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index ab35a44c7f8..34372cb5156 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3208,6 +3208,36 @@ public static boolean isAllUpperCase(final CharSequence cs) { return true; } + /** + * Counts the number of uppercase characters in the given {@code CharSequence}. + * + *

{@code null} or an empty CharSequence returns {@code 0}.

+ * + *
+     * StringUtils.countUpperCaseLetters(null)    = 0
+     * StringUtils.countUpperCaseLetters("")      = 0
+     * StringUtils.countUpperCaseLetters("abc")   = 0
+     * StringUtils.countUpperCaseLetters("ABC")   = 3
+     * StringUtils.countUpperCaseLetters("AbC1")  = 2
+     * 
+ * + * @param cs the CharSequence to check, may be null + * @return the number of uppercase characters in the CharSequence, or {@code 0} if null/empty + */ + + public static int countUpperCaseLetters(final CharSequence cs) { + if(cs == null || cs.length() == 0) { + return 0; + } + + int count=0; + for(int i=0; i Date: Tue, 27 May 2025 02:34:30 -0700 Subject: [PATCH 2/4] Fix LANG-1771: Handle malformed input '[String' in getShortCanonicalName --- .../org/apache/commons/lang3/ClassUtils.java | 5 ++-- .../org/apache/commons/lang3/StringUtils.java | 30 ------------------- .../apache/commons/lang3/ClassUtilsTest.java | 9 ++++++ .../apache/commons/lang3/StringUtilsTest.java | 14 --------- 4 files changed, 12 insertions(+), 46 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/ClassUtils.java b/src/main/java/org/apache/commons/lang3/ClassUtils.java index 5270bee276e..8db2c10fa3b 100644 --- a/src/main/java/org/apache/commons/lang3/ClassUtils.java +++ b/src/main/java/org/apache/commons/lang3/ClassUtils.java @@ -496,9 +496,10 @@ private static String getCanonicalName(final String name) { className = className.substring(dim); if (className.startsWith("L")) { className = className.substring(1, className.endsWith(";") ? className.length() - 1 : className.length()); - } else if (!className.isEmpty()) { - className = reverseAbbreviationMap.get(className.substring(0, 1)); + } else if (className.length() == 1 && reverseAbbreviationMap.containsKey(className)) { + className = reverseAbbreviationMap.get(className); } + final StringBuilder canonicalClassNameBuffer = new StringBuilder(className.length() + dim * 2); canonicalClassNameBuffer.append(className); for (int i = 0; i < dim; i++) { diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 34372cb5156..ab35a44c7f8 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -3208,36 +3208,6 @@ public static boolean isAllUpperCase(final CharSequence cs) { return true; } - /** - * Counts the number of uppercase characters in the given {@code CharSequence}. - * - *

{@code null} or an empty CharSequence returns {@code 0}.

- * - *
-     * StringUtils.countUpperCaseLetters(null)    = 0
-     * StringUtils.countUpperCaseLetters("")      = 0
-     * StringUtils.countUpperCaseLetters("abc")   = 0
-     * StringUtils.countUpperCaseLetters("ABC")   = 3
-     * StringUtils.countUpperCaseLetters("AbC1")  = 2
-     * 
- * - * @param cs the CharSequence to check, may be null - * @return the number of uppercase characters in the CharSequence, or {@code 0} if null/empty - */ - - public static int countUpperCaseLetters(final CharSequence cs) { - if(cs == null || cs.length() == 0) { - return 0; - } - - int count=0; - for(int i=0; i Date: Wed, 28 May 2025 11:23:07 -0400 Subject: [PATCH 3/4] Remove extra vertical whitespace --- src/main/java/org/apache/commons/lang3/ClassUtils.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/apache/commons/lang3/ClassUtils.java b/src/main/java/org/apache/commons/lang3/ClassUtils.java index 8db2c10fa3b..db4d4510b5a 100644 --- a/src/main/java/org/apache/commons/lang3/ClassUtils.java +++ b/src/main/java/org/apache/commons/lang3/ClassUtils.java @@ -499,7 +499,6 @@ private static String getCanonicalName(final String name) { } else if (className.length() == 1 && reverseAbbreviationMap.containsKey(className)) { className = reverseAbbreviationMap.get(className); } - final StringBuilder canonicalClassNameBuffer = new StringBuilder(className.length() + dim * 2); canonicalClassNameBuffer.append(className); for (int i = 0; i < dim; i++) { From 2dd8f9bf724ada3fc7b073c59fd57dd6e7f3ece6 Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Wed, 28 May 2025 11:24:00 -0400 Subject: [PATCH 4/4] Revert change --- src/test/java/org/apache/commons/lang3/StringUtilsTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index 6b6be9cef66..6482182bd7b 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -937,6 +937,7 @@ public void testIsAllUpperCase() { assertFalse(StringUtils.isAllUpperCase("A1C")); assertFalse(StringUtils.isAllUpperCase("A/C")); } + /** * Test for {@link StringUtils#isMixedCase(CharSequence)}. */