diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index cf1f4c4c568..97973df9a23 100644 --- a/src/main/java/org/apache/commons/lang3/StringUtils.java +++ b/src/main/java/org/apache/commons/lang3/StringUtils.java @@ -8690,6 +8690,41 @@ public static String substringBefore(final String str, final String separator) { } return str.substring(0, pos); } + + /** + * Gets the substring before the last occurrence of a separator. + * The separator is not returned. + * + *

A {@code null} string input will return {@code null}. + * An empty ("") string input will return the empty string.

+ * + *

If nothing is found, the string input is returned.

+ * + *
+     * StringUtils.substringBeforeLast(null, *)      = null
+     * StringUtils.substringBeforeLast("", *)        = ""
+     * StringUtils.substringBeforeLast("abcba", 'b') = "abc"
+     * StringUtils.substringBeforeLast("abc", 'c')   = "ab"
+     * StringUtils.substringBeforeLast("a", 'a')     = ""
+     * StringUtils.substringBeforeLast("a", 'z')     = "a"
+     * 
+ * + * @param str the String to get a substring from, may be null + * @param separator the character (Unicode code point) to search. + * @return the substring before the last occurrence of the separator, + * {@code null} if null String input + * @since 3.12.1 + */ + public static String substringBeforeLast(final String str, final int separator) { + if (isEmpty(str)) { + return str; + } + final int pos = str.lastIndexOf(separator); + if (pos == INDEX_NOT_FOUND) { + return str; + } + return str.substring(0, pos); + } /** * Gets the substring before the last occurrence of a separator.