LANG-405 rename method from truncateMiddle() to abbreviateMiddle()

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@901815 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Niall Pemberton 2010-01-21 18:22:15 +00:00
parent d918999ddd
commit 9143987fa0
2 changed files with 89 additions and 89 deletions

View File

@ -5512,6 +5512,55 @@ public class StringUtils {
return "..." + str.substring(str.length() - (maxWidth - 3));
}
/**
* <p>Abbreviates a String to the length passed, replacing the middle characters with the supplied
* replacement String.</p>
*
* <p>This abbreviation only occurs if the following criteria is met:
* <ul>
* <li>Neither the String for abbreviation nor the replacement String are null or empty </li>
* <li>The length to truncate to is less than the length of the supplied String</li>
* <li>The length to truncate to is greater than 0</li>
* <li>The abbreviated String will have enough room for the length supplied replacement String
* and the first and last characters of the supplied String for truncation</li>
* </ul>
* Otherwise, the returned String will be the same as the supplied String for abbreviation.
* </p>
*
* <pre>
* StringUtils.abbreviateMiddle(null, null, 0) = null
* StringUtils.abbreviateMiddle("abc", null, 0) = "abc"
* StringUtils.abbreviateMiddle("abc", ".", 0) = "abc"
* StringUtils.abbreviateMiddle("abc", ".", 3) = "abc"
* StringUtils.abbreviateMiddle("abcdef", ".", 4) = "ab.f"
* </pre>
*
* @param str the String to abbreviate, may be null
* @param middle the String to replace the middle characters with, may be null
* @param length the length to abbreviate <code>str</code> to.
* @return the abbreviated String if the above criteria is met, or the original String supplied for abbreviation.
*/
public static String abbreviateMiddle(String str, String middle, int length) {
if (isEmpty(str) || isEmpty(middle)) {
return str;
}
if (length >= str.length() || length < (middle.length()+2)) {
return str;
}
int targetSting = length-middle.length();
int startOffset = targetSting/2+targetSting%2;
int endOffset = str.length()-targetSting/2;
StringBuilder builder = new StringBuilder(length);
builder.append(str.substring(0,startOffset));
builder.append(middle);
builder.append(str.substring(endOffset));
return builder.toString();
}
// Difference
//-----------------------------------------------------------------------
/**
@ -6052,53 +6101,4 @@ public class StringUtils {
int strOffset = str.length() - suffix.length();
return str.regionMatches(ignoreCase, strOffset, suffix, 0, suffix.length());
}
/**
* <p>Truncates a String to the length passed, replacing the middle characters with the supplied
* replacement String.</p>
*
* <p>This truncation only occurs if the following criteria is met:
* <ul>
* <li>Neither the String for truncation nor the replacement String are null or empty </li>
* <li>The length to truncate to is less than the length of the supplied String</li>
* <li>The length to truncate to is greater than 0</li>
* <li>The truncated String will have enough room for the length supplied replacement String
* and the first and last characters of the supplied String for truncation</li>
* </ul>
* Otherwise, the returned String will be the same as the supplied String for truncation.
* </p>
*
* <pre>
* StringUtils.truncateMiddle(null, null, 0) = null
* StringUtils.truncateMiddle("abc", null, 0) = "abc"
* StringUtils.truncateMiddle("abc", ".", 0) = "abc"
* StringUtils.truncateMiddle("abc", ".", 3) = "abc"
* StringUtils.truncateMiddle("abcdef", ".", 4) = "ab.f"
* </pre>
*
* @param str the String to truncate, may be null
* @param middle the String to replace the middle characters with, may be null
* @param length the length to truncate <code>str</code> to.
* @return the truncated String if the above criteria is met, or the original String supplied for truncation.
*/
public static String truncateMiddle(String str, String middle, int length) {
if (isEmpty(str) || isEmpty(middle)) {
return str;
}
if (length >= str.length() || length < (middle.length()+2)) {
return str;
}
int targetSting = length-middle.length();
int startOffset = targetSting/2+targetSting%2;
int endOffset = str.length()-targetSting/2;
StringBuilder builder = new StringBuilder(length);
builder.append(str.substring(0,startOffset));
builder.append(middle);
builder.append(str.substring(endOffset));
return builder.toString();
}
}

View File

@ -1474,6 +1474,46 @@ public class StringUtilsTest extends TestCase {
assertEquals(message, expected, actual);
}
public void testAbbreviateMiddle() {
// javadoc examples
assertNull( StringUtils.abbreviateMiddle(null, null, 0) );
assertEquals( "abc", StringUtils.abbreviateMiddle("abc", null, 0) );
assertEquals( "abc", StringUtils.abbreviateMiddle("abc", ".", 0) );
assertEquals( "abc", StringUtils.abbreviateMiddle("abc", ".", 3) );
assertEquals( "ab.f", StringUtils.abbreviateMiddle("abcdef", ".", 4) );
// JIRA issue (LANG-405) example (slightly different than actual expected result)
assertEquals(
"A very long text with un...f the text is complete.",
StringUtils.abbreviateMiddle(
"A very long text with unimportant stuff in the middle but interesting start and " +
"end to see if the text is complete.", "...", 50) );
// Test a much longer text :)
String longText = "Start text" + StringUtils.repeat("x", 10000) + "Close text";
assertEquals(
"Start text->Close text",
StringUtils.abbreviateMiddle( longText, "->", 22 ) );
// Test negative length
assertEquals("abc", StringUtils.abbreviateMiddle("abc", ".", -1));
// Test boundaries
// Fails to change anything as method ensures first and last char are kept
assertEquals("abc", StringUtils.abbreviateMiddle("abc", ".", 1));
assertEquals("abc", StringUtils.abbreviateMiddle("abc", ".", 2));
// Test length of n=1
assertEquals("a", StringUtils.abbreviateMiddle("a", ".", 1));
// Test smallest length that can lead to success
assertEquals("a.d", StringUtils.abbreviateMiddle("abcd", ".", 3));
// More from LANG-405
assertEquals("a..f", StringUtils.abbreviateMiddle("abcdef", "..", 4));
assertEquals("ab.ef", StringUtils.abbreviateMiddle("abcdef", ".", 5));
}
//-----------------------------------------------------------------------
public void testDifference_StringString() {
assertEquals(null, StringUtils.difference(null, null));
@ -1686,46 +1726,6 @@ public class StringUtilsTest extends TestCase {
assertEquals("queued", StringUtils.remove("queued", 'z'));
}
public void testTruncateMiddle() {
// javadoc examples
assertNull( StringUtils.truncateMiddle(null, null, 0) );
assertEquals( "abc", StringUtils.truncateMiddle("abc", null, 0) );
assertEquals( "abc", StringUtils.truncateMiddle("abc", ".", 0) );
assertEquals( "abc", StringUtils.truncateMiddle("abc", ".", 3) );
assertEquals( "ab.f", StringUtils.truncateMiddle("abcdef", ".", 4) );
// JIRA issue (LANG-405) example (slightly different than actual expected result)
assertEquals(
"A very long text with un...f the text is complete.",
StringUtils.truncateMiddle(
"A very long text with unimportant stuff in the middle but interesting start and " +
"end to see if the text is complete.", "...", 50) );
// Test a much longer text :)
String longText = "Start text" + StringUtils.repeat("x", 10000) + "Close text";
assertEquals(
"Start text->Close text",
StringUtils.truncateMiddle( longText, "->", 22 ) );
// Test negative length
assertEquals("abc", StringUtils.truncateMiddle("abc", ".", -1));
// Test boundaries
// Fails to change anything as method ensures first and last char are kept
assertEquals("abc", StringUtils.truncateMiddle("abc", ".", 1));
assertEquals("abc", StringUtils.truncateMiddle("abc", ".", 2));
// Test length of n=1
assertEquals("a", StringUtils.truncateMiddle("a", ".", 1));
// Test smallest length that can lead to success
assertEquals("a.d", StringUtils.truncateMiddle("abcd", ".", 3));
// More from LANG-405
assertEquals("a..f", StringUtils.truncateMiddle("abcdef", "..", 4));
assertEquals("ab.ef", StringUtils.truncateMiddle("abcdef", ".", 5));
}
public void testDifferenceAt_StringArray(){
assertEquals(-1, StringUtils.indexOfDifference(null));
assertEquals(-1, StringUtils.indexOfDifference(new String[] {}));