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:
parent
d918999ddd
commit
9143987fa0
|
@ -5512,6 +5512,55 @@ public class StringUtils {
|
||||||
return "..." + str.substring(str.length() - (maxWidth - 3));
|
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
|
// Difference
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
|
@ -6052,53 +6101,4 @@ public class StringUtils {
|
||||||
int strOffset = str.length() - suffix.length();
|
int strOffset = str.length() - suffix.length();
|
||||||
return str.regionMatches(ignoreCase, strOffset, suffix, 0, 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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1474,6 +1474,46 @@ public class StringUtilsTest extends TestCase {
|
||||||
assertEquals(message, expected, actual);
|
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() {
|
public void testDifference_StringString() {
|
||||||
assertEquals(null, StringUtils.difference(null, null));
|
assertEquals(null, StringUtils.difference(null, null));
|
||||||
|
@ -1686,46 +1726,6 @@ public class StringUtilsTest extends TestCase {
|
||||||
assertEquals("queued", StringUtils.remove("queued", 'z'));
|
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(){
|
public void testDifferenceAt_StringArray(){
|
||||||
assertEquals(-1, StringUtils.indexOfDifference(null));
|
assertEquals(-1, StringUtils.indexOfDifference(null));
|
||||||
assertEquals(-1, StringUtils.indexOfDifference(new String[] {}));
|
assertEquals(-1, StringUtils.indexOfDifference(new String[] {}));
|
||||||
|
|
Loading…
Reference in New Issue