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 => FABCDE)</li>
+ * <li>If {@code shift < 0}, left circular shift (ex : ABCDEF => 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>