diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index d3388f7a6..c0c463530 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -9159,8 +9159,10 @@ public static String uncapitalize(final String str) { * StringUtils.unwrap(null, null) = null * StringUtils.unwrap(null, '\0') = null * StringUtils.unwrap(null, '1') = null + * StringUtils.unwrap("a", 'a') = "a" + * StringUtils.unwrap("aa", 'a') = "" * StringUtils.unwrap("\'abc\'", '\'') = "abc" - * StringUtils.unwrap("AABabcBAA", 'A') = "ABabcBA" + * StringUtils.unwrap("AABabcBAA", 'A') = "ABabcBA" * StringUtils.unwrap("A", '#') = "A" * StringUtils.unwrap("#A", '#') = "#A" * StringUtils.unwrap("A#", '#') = "A#" @@ -9175,16 +9177,15 @@ public static String uncapitalize(final String str) { * @since 3.6 */ public static String unwrap(final String str, final char wrapChar) { - if (isEmpty(str) || wrapChar == CharUtils.NUL) { + if (isEmpty(str) || wrapChar == CharUtils.NUL || str.length() == 1) { return str; } if (str.charAt(0) == wrapChar && str.charAt(str.length() - 1) == wrapChar) { final int startIndex = 0; final int endIndex = str.length() - 1; - if (endIndex != -1) { - return str.substring(startIndex + 1, endIndex); - } + + return str.substring(startIndex + 1, endIndex); } return str; @@ -9199,6 +9200,8 @@ public static String unwrap(final String str, final char wrapChar) { * StringUtils.unwrap(null, null) = null * StringUtils.unwrap(null, "") = null * StringUtils.unwrap(null, "1") = null + * StringUtils.unwrap("a", "a") = "a" + * StringUtils.unwrap("aa", "a") = "" * StringUtils.unwrap("\'abc\'", "\'") = "abc" * StringUtils.unwrap("\"abc\"", "\"") = "abc" * StringUtils.unwrap("AABabcBAA", "AA") = "BabcB" @@ -9216,7 +9219,7 @@ public static String unwrap(final String str, final char wrapChar) { * @since 3.6 */ public static String unwrap(final String str, final String wrapToken) { - if (isEmpty(str) || isEmpty(wrapToken)) { + if (isEmpty(str) || isEmpty(wrapToken) || str.length() == 1) { return str; } @@ -9224,6 +9227,7 @@ public static String unwrap(final String str, final String wrapToken) { final int startIndex = str.indexOf(wrapToken); final int endIndex = str.lastIndexOf(wrapToken); final int wrapLength = wrapToken.length(); + if (startIndex != -1 && endIndex != -1) { return str.substring(startIndex + wrapLength, endIndex); } diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index 3810a5c12..b2e80e62a 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -3073,6 +3073,8 @@ public void testUnwrap_StringChar() { assertNull(StringUtils.unwrap(null, '1')); assertEquals("abc", StringUtils.unwrap("abc", null)); + assertEquals("a", StringUtils.unwrap("a", "a")); + assertEquals("", StringUtils.unwrap("aa", "a")); assertEquals("abc", StringUtils.unwrap("\'abc\'", '\'')); assertEquals("abc", StringUtils.unwrap("AabcA", 'A')); assertEquals("AabcA", StringUtils.unwrap("AAabcAA", 'A')); @@ -3090,6 +3092,8 @@ public void testUnwrap_StringString() { assertEquals("abc", StringUtils.unwrap("abc", null)); assertEquals("abc", StringUtils.unwrap("abc", "")); + assertEquals("a", StringUtils.unwrap("a", "a")); + assertEquals("", StringUtils.unwrap("aa", "a")); assertEquals("abc", StringUtils.unwrap("\'abc\'", "\'")); assertEquals("abc", StringUtils.unwrap("\"abc\"", "\"")); assertEquals("abc\"xyz", StringUtils.unwrap("\"abc\"xyz\"", "\""));