You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2010/01/21 19:22:15 UTC

svn commit: r901815 - in /commons/proper/lang/trunk/src: main/java/org/apache/commons/lang3/StringUtils.java test/java/org/apache/commons/lang3/StringUtilsTest.java

Author: niallp
Date: Thu Jan 21 18:22:15 2010
New Revision: 901815

URL: http://svn.apache.org/viewvc?rev=901815&view=rev
Log:
LANG-405 rename method from truncateMiddle() to abbreviateMiddle()

Modified:
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java
    commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java

Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java?rev=901815&r1=901814&r2=901815&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java (original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java Thu Jan 21 18:22:15 2010
@@ -5511,6 +5511,55 @@
         }
         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 @@
         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();
-    }
 }

Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java?rev=901815&r1=901814&r2=901815&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java (original)
+++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/StringUtilsTest.java Thu Jan 21 18:22:15 2010
@@ -1474,6 +1474,46 @@
         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));
@@ -1685,46 +1725,6 @@
         // StringUtils.remove("queued", 'z') = "queued"
         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));