Applying the truncateNicely patch from LANG-338 as abbreviate. I've added it to WordUtils rather than StringUtils; it feels like a better fit there to me

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@594599 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Henri Yandell 2007-11-13 18:04:59 +00:00
parent 1dc6761059
commit bbde1ad30e
2 changed files with 92 additions and 0 deletions

View File

@ -581,4 +581,59 @@ private static boolean isDelimiter(char ch, char[] delimiters) {
return false;
}
//-----------------------------------------------------------------------
/**
* Abbreviates a string nicely.
*
* This method searches for the first space after the lower limit and abbreviates
* the String there. It will also append any String passed as a parameter
* to the end of the String. The upper limit can be specified to forcibly
* abbreviate a String.
*
* @param str the string to be abbreviated. If null is passed, null is returned.
* If the empty String is passed, the empty string is returned.
* @param lower the lower limit.
* @param upper the upper limit; specify -1 if no limit is desired.
* If the upper limit is lower than the lower limit, it will be
* adjusted to be the same as the lower limit.
* @param appendToEnd String to be appended to the end of the abbreviated string.
* This is appended ONLY if the string was indeed abbreviated.
* The append does not count towards the lower or upper limits.
* @return the abbreviated String.
*/
public static String abbreviate(String str, int lower, int upper, String appendToEnd) {
// initial parameter checks
if (str == null) {
return null;
}
if (str.length() == 0) {
return StringUtils.EMPTY;
}
// if the upper value is -1 (i.e. no limit) or is greater
// than the length of the string, set to the length of the string
if (upper == -1 || upper > str.length()) {
upper = str.length();
}
// if upper is less than lower, raise it to lower
if (upper < lower) {
upper = lower;
}
StringBuffer result = new StringBuffer();
int index = StringUtils.indexOf(str, " ", lower);
if (index == -1) {
result.append(str.substring(0, upper));
// only if abbreviation has occured do we append the appendToEnd value
if (upper != str.length()) result.append(StringUtils.defaultString(appendToEnd));
} else if (index > upper) {
result.append(str.substring(0, upper));
result.append(StringUtils.defaultString(appendToEnd));
} else {
result.append(str.substring(0, index));
result.append(StringUtils.defaultString(appendToEnd));
}
return result.toString();
}
}

View File

@ -362,4 +362,41 @@ public void testSwapCase_String() {
assertEquals(expect, WordUtils.swapCase(test));
}
// -----------------------------------------------------------------------
public void testAbbreviate() {
// check null and empty are returned respectively
assertNull(WordUtils.abbreviate(null, 1,-1,""));
assertEquals(StringUtils.EMPTY, WordUtils.abbreviate("", 1,-1,""));
// test upper limit
assertEquals("01234", WordUtils.abbreviate("0123456789", 0,5,""));
assertEquals("01234", WordUtils.abbreviate("0123456789", 5, 2,""));
assertEquals("012", WordUtils.abbreviate("012 3456789", 2, 5,""));
assertEquals("012 3", WordUtils.abbreviate("012 3456789", 5, 2,""));
assertEquals("0123456789", WordUtils.abbreviate("0123456789", 0,-1,""));
// test upper limit + append string
assertEquals("01234-", WordUtils.abbreviate("0123456789", 0,5,"-"));
assertEquals("01234-", WordUtils.abbreviate("0123456789", 5, 2,"-"));
assertEquals("012", WordUtils.abbreviate("012 3456789", 2, 5, null));
assertEquals("012 3", WordUtils.abbreviate("012 3456789", 5, 2,""));
assertEquals("0123456789", WordUtils.abbreviate("0123456789", 0,-1,""));
// test lower value
assertEquals("012", WordUtils.abbreviate("012 3456789", 0,5, null));
assertEquals("01234", WordUtils.abbreviate("01234 56789", 5, 10, null));
assertEquals("01 23 45 67", WordUtils.abbreviate("01 23 45 67 89", 9, -1, null));
assertEquals("01 23 45 6", WordUtils.abbreviate("01 23 45 67 89", 9, 10, null));
// test lower value + append
assertEquals("012", WordUtils.abbreviate("012 3456789", 0,5, null));
assertEquals("01234-", WordUtils.abbreviate("01234 56789", 5, 10, "-"));
assertEquals("01 23 45 67abc", WordUtils.abbreviate("01 23 45 67 89", 9, -1, "abc"));
assertEquals("01 23 45 6", WordUtils.abbreviate("01 23 45 67 89", 9, 10, ""));
// others
assertEquals("", WordUtils.abbreviate("0123456790", 0,0,""));
assertEquals("", WordUtils.abbreviate(" 0123456790", 0,-1,""));
}
}