You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by br...@apache.org on 2015/04/28 21:57:36 UTC

[1/3] [lang] LANG-1119: Add StringUtils.rotate(String, int)

Repository: commons-lang
Updated Branches:
  refs/heads/master 0799f01df -> 102b75cd9


LANG-1119: Add StringUtils.rotate(String, int)


Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/02a98515
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/02a98515
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/02a98515

Branch: refs/heads/master
Commit: 02a98515a337991f0ce05271ac90121fa204d9db
Parents: 0799f01
Author: Loic Guibert <lf...@yahoo.fr>
Authored: Sun Apr 26 16:57:21 2015 +0400
Committer: Benedikt Ritter <br...@apache.org>
Committed: Tue Apr 28 21:53:24 2015 +0200

----------------------------------------------------------------------
 .../org/apache/commons/lang3/StringUtils.java   | 46 ++++++++++++++++++++
 .../apache/commons/lang3/StringUtilsTest.java   | 16 +++++++
 2 files changed, 62 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/02a98515/src/main/java/org/apache/commons/lang3/StringUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java
index 2624572..279c472 100644
--- a/src/main/java/org/apache/commons/lang3/StringUtils.java
+++ b/src/main/java/org/apache/commons/lang3/StringUtils.java
@@ -74,6 +74,8 @@ import java.util.regex.Pattern;
  *      - checks the characters in a String</li>
  *  <li><b>DefaultString</b>
  *      - protects against a null input String</li>
+ *  <li><b>Rotate</b>
+ *      - rotate (circular shift) a String</li>
  *  <li><b>Reverse/ReverseDelimited</b>
  *      - reverses a String</li>
  *  <li><b>Abbreviate</b>
@@ -6338,6 +6340,50 @@ public class StringUtils {
         return isEmpty(str) ? defaultStr : str;
     }
 
+    // Rotating (circular shift)
+    //-----------------------------------------------------------------------
+    /**
+     * <p>Rotate (circular shift) a String of {@code shift} characters.</p>
+     * <ul>
+     *  <li>If {@code shift > 0}, right circular shift (ex : ABCDEF =&gt; FABCDE)</li>
+     *  <li>If {@code shift < 0}, left circular shift (ex : ABCDEF =&gt; BCDEFA)</li>
+     * </ul>
+     *
+     * <pre>
+     * StringUtils.rotate(null, *)        = null
+     * StringUtils.rotate("", *)          = ""
+     * StringUtils.rotate("abcdefg", 0)   = "abcdefg"
+     * StringUtils.rotate("abcdefg", 2)   = "fgabcde"
+     * StringUtils.rotate("abcdefg", -2)  = "cdefgab"
+     * StringUtils.rotate("abcdefg", 7)   = "abcdefg"
+     * StringUtils.rotate("abcdefg", -7)  = "abcdefg"
+     * StringUtils.rotate("abcdefg", 9)   = "fgabcde"
+     * StringUtils.rotate("abcdefg", -9)  = "cdefgab"
+     * </pre>
+     *
+     * @param str  the String to rotate, may be null
+     * @param shift  number of time to shift (positive : right shift, negative : left shift)
+     * @return the rotated String,
+     *          or the original String if {@code shift == 0},
+     *          or {@code null} if null String input
+     */
+    public static String rotate(String str, int shift) {
+        if (str == null) {
+            return null;
+        }
+
+        final int strLen = str.length();
+        if (shift == 0 || strLen == 0 || shift % strLen == 0) {
+            return str;
+        }
+
+        final StringBuilder builder = new StringBuilder(strLen);
+        final int offset = - (shift % strLen);
+        builder.append(substring(str, offset));
+        builder.append(substring(str, 0, offset));
+        return builder.toString();
+    }
+
     // Reversing
     //-----------------------------------------------------------------------
     /**

http://git-wip-us.apache.org/repos/asf/commons-lang/blob/02a98515/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
index 3addd78..f11ec70 100644
--- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java
@@ -1627,6 +1627,22 @@ public class StringUtilsTest {
 
     //-----------------------------------------------------------------------
     @Test
+    public void testRotate_StringInt() {
+        assertEquals(null, StringUtils.rotate(null, 1));
+        assertEquals("", StringUtils.rotate("", 1));
+        assertEquals("abcdefg", StringUtils.rotate("abcdefg", 0));
+        assertEquals("fgabcde", StringUtils.rotate("abcdefg", 2));
+        assertEquals("cdefgab", StringUtils.rotate("abcdefg", -2));
+        assertEquals("abcdefg", StringUtils.rotate("abcdefg", 7));
+        assertEquals("abcdefg", StringUtils.rotate("abcdefg", -7));
+        assertEquals("fgabcde", StringUtils.rotate("abcdefg", 9));
+        assertEquals("cdefgab", StringUtils.rotate("abcdefg", -9));
+        assertEquals("efgabcd", StringUtils.rotate("abcdefg", 17));
+        assertEquals("defgabc", StringUtils.rotate("abcdefg", -17));
+    }
+
+    //-----------------------------------------------------------------------
+    @Test
     public void testReverse_String() {
         assertNull(StringUtils.reverse(null) );
         assertEquals("", StringUtils.reverse("") );


[3/3] [lang] Merge branch 'fix-LANG-1119' of https://github.com/rikles/commons-lang This closes #71.

Posted by br...@apache.org.
Merge branch 'fix-LANG-1119' of https://github.com/rikles/commons-lang
This closes #71.

LANG-1119: Add rotate(string, int) method to StringUtils. Thanks to
Loic Guibert.


Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/102b75cd
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/102b75cd
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/102b75cd

Branch: refs/heads/master
Commit: 102b75cd923c30fb81047211ea1eb0b12cfe1a43
Parents: 0799f01 d4359d5
Author: Benedikt Ritter <br...@apache.org>
Authored: Tue Apr 28 21:55:53 2015 +0200
Committer: Benedikt Ritter <br...@apache.org>
Committed: Tue Apr 28 21:55:53 2015 +0200

----------------------------------------------------------------------
 src/changes/changes.xml                         |  1 +
 .../org/apache/commons/lang3/StringUtils.java   | 46 ++++++++++++++++++++
 .../apache/commons/lang3/StringUtilsTest.java   | 16 +++++++
 3 files changed, 63 insertions(+)
----------------------------------------------------------------------



[2/3] [lang] Add LANG-1119 to changes.xml

Posted by br...@apache.org.
Add LANG-1119 to changes.xml


Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/d4359d5f
Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/d4359d5f
Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/d4359d5f

Branch: refs/heads/master
Commit: d4359d5f14a7cbb40e1ac6549b6ae1a30cc9aa3a
Parents: 02a9851
Author: Benedikt Ritter <br...@apache.org>
Authored: Tue Apr 28 21:55:35 2015 +0200
Committer: Benedikt Ritter <br...@apache.org>
Committed: Tue Apr 28 21:55:35 2015 +0200

----------------------------------------------------------------------
 src/changes/changes.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/d4359d5f/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d2416b4..785a3b2 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -22,6 +22,7 @@
   <body>
 
   <release version="3.5" date="tba" description="tba">
+    <action issue="LANG-1119" type="add" dev="britter" due-to="Loic Guibert">Add rotate(string, int) method to StringUtils</action>
     <action issue="LANG-1118" type="fix" dev="britter" due-to="Loic Guibert">StringUtils.repeat('z', -1) throws NegativeArraySizeException</action>
     <action issue="LANG-1099" type="add" dev="britter" due-to="Adrian Ber">Add swap and shift operations for arrays to ArrayUtils</action>
     <action issue="LANG-979" type="update" dev="britter" due-to="Bruno P. Kinoshita">TypeUtils.parameterizeWithOwner - wrong format descriptor for "invalid number of type parameters".</action>