From 16b03b0c4b7e25dc89892b1f88a35888646d462f Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Mon, 27 Apr 2015 20:21:41 +0200 Subject: [PATCH 1/3] Update SCM information after svn to git migration --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 204d4a10167..3d809099303 100644 --- a/pom.xml +++ b/pom.xml @@ -45,9 +45,9 @@ - scm:svn:http://svn.apache.org/repos/asf/commons/proper/lang/trunk - scm:svn:https://svn.apache.org/repos/asf/commons/proper/lang/trunk - http://svn.apache.org/viewvc/commons/proper/lang/trunk + scm:git:http://git-wip-us.apache.org/repos/asf/commons-lang.git + scm:git:https://git-wip-us.apache.org/repos/asf/commons-lang.git + https://git-wip-us.apache.org/repos/asf?p=commons-lang.git From d81ea83a0eb1761bb4e90a91f3b70f23f88a7d2a Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Mon, 27 Apr 2015 21:30:22 +0200 Subject: [PATCH 2/3] Apply patch contributed by Bruno P. Kinoshita --- src/changes/changes.xml | 1 + src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 39e0808ac34..3e25e069451 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -22,6 +22,7 @@ + TypeUtils.parameterizeWithOwner - wrong format descriptor for "invalid number of type parameters". MultilineRecursiveToStringStyle largely unusable due to being package-private. StringUtils.uncapitalize performance improvement CharSet.getInstance documentation does not clearly explain how to include negation character in set diff --git a/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java b/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java index 99a1625b473..1a750e97dfb 100644 --- a/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java +++ b/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java @@ -1500,7 +1500,7 @@ public static final ParameterizedType parameterizeWithOwner(final Type owner, fi } Validate.noNullElements(typeArguments, "null type argument at index %s"); Validate.isTrue(raw.getTypeParameters().length == typeArguments.length, - "invalid number of type parameters specified: expected %s, got %s", raw.getTypeParameters().length, + "invalid number of type parameters specified: expected %d, got %d", raw.getTypeParameters().length, typeArguments.length); return new ParameterizedTypeImpl(raw, useOwner, typeArguments); From c1da015fa649fc1836d726b9a124c6425263d45e Mon Sep 17 00:00:00 2001 From: Loic Guibert Date: Sun, 26 Apr 2015 16:57:21 +0400 Subject: [PATCH 3/3] LANG-1119: Add StringUtils.rotate(String, int) --- .../org/apache/commons/lang3/StringUtils.java | 46 +++++++++++++++++++ .../apache/commons/lang3/StringUtilsTest.java | 16 +++++++ 2 files changed, 62 insertions(+) diff --git a/src/main/java/org/apache/commons/lang3/StringUtils.java b/src/main/java/org/apache/commons/lang3/StringUtils.java index 360185c176b..5ecc93d59fd 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 @@ * - checks the characters in a String *
  • DefaultString * - protects against a null input String
  • + *
  • Rotate + * - rotate (circular shift) a String
  • *
  • Reverse/ReverseDelimited * - reverses a String
  • *
  • Abbreviate @@ -6335,6 +6337,50 @@ public static T defaultIfEmpty(final T str, final T def return isEmpty(str) ? defaultStr : str; } + // Rotating (circular shift) + //----------------------------------------------------------------------- + /** + *

    Rotate (circular shift) a String of {@code shift} characters.

    + *
      + *
    • If {@code shift > 0}, right circular shift (ex : ABCDEF => FABCDE)
    • + *
    • If {@code shift < 0}, left circular shift (ex : ABCDEF => BCDEFA)
    • + *
    + * + *
    +     * 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"
    +     * 
    + * + * @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 //----------------------------------------------------------------------- /** diff --git a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java index 5721dbc70a0..2dd18b62c27 100644 --- a/src/test/java/org/apache/commons/lang3/StringUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/StringUtilsTest.java @@ -1617,6 +1617,22 @@ public void testCenter_StringIntString() { assertEquals(" abc ", StringUtils.center("abc", 7, "")); } + //----------------------------------------------------------------------- + @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() {