public static String abbreviateWithImportantEnding(String s, int maxLength) { // Abbreviates with default split char return abbreviateWithImportantEnding(s, maxLength, "|"); } public static String abbreviateWithImportantEnding(String s, int maxLength, String split) { String result; int minAbbrevLength = 3; // Max length must be greater than 3 to abbreviate the start string with StringUtils if (s.contains(split) && maxLength > minAbbrevLength) { String start = s.substring(0, s.lastIndexOf(split)); // First part of the String String end = s.substring(s.lastIndexOf(split), s.length()); // End part of the String (important) int endLength = end.length(); int maxStart = maxLength - endLength; if (start.length() > minAbbrevLength && maxStart > minAbbrevLength) { start = StringUtils.abbreviate(start, maxStart); } else { String ellipsis = "..."; start = start.isEmpty() ? "" : ellipsis; // Only add ellipsis when the start is not empty if (end.length() > minAbbrevLength) { end = StringUtils.abbreviate(end, maxLength - ellipsis.length()); } } result = start + end; } else { result = StringUtils.abbreviate(s, maxLength); } return result; }