Repository: commons-lang
Updated Branches:
  refs/heads/master f26f04dc6 -> afedbae8a


LANG-1206: Improve CharSetUtils.squeeze() performance (closes #147)

patch by Mohammed Alfallaj


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

Branch: refs/heads/master
Commit: afedbae8aca69a092d65766640361801bf2b5d9b
Parents: f26f04d
Author: pascalschumacher <pascalschumac...@gmx.net>
Authored: Fri May 20 20:04:30 2016 +0200
Committer: pascalschumacher <pascalschumac...@gmx.net>
Committed: Sun May 29 17:05:23 2016 +0200

----------------------------------------------------------------------
 src/changes/changes.xml                         |  1 +
 .../org/apache/commons/lang3/CharSetUtils.java  | 23 +++++++++++++++-----
 2 files changed, 19 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-lang/blob/afedbae8/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bd03520..a03b992 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-1206" type="update" dev="pschumacher" due-to="Mohammed 
Alfallaj">Improve CharSetUtils.squeeze() performance</action>
     <action issue="LANG-1225" type="add" dev="pschumacher" due-to="Caleb 
Cushing">Add RandomStringUtils#randomGraph and #randomPrint which match 
corresponding regular expression class</action>
     <action issue="LANG-901" type="fix" dev="pschumacher" due-to="Matthew 
Bartenschlag">StringUtils#startsWithAny/endsWithAny is case sensitive - 
documented as case insensitive</action>
     <action issue="LANG-1223" type="add" dev="pschumacher" due-to="Nick 
Manley">Add StopWatch#getTime(TimeUnit)</action>

http://git-wip-us.apache.org/repos/asf/commons-lang/blob/afedbae8/src/main/java/org/apache/commons/lang3/CharSetUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/lang3/CharSetUtils.java 
b/src/main/java/org/apache/commons/lang3/CharSetUtils.java
index 8599674..67d6fea 100644
--- a/src/main/java/org/apache/commons/lang3/CharSetUtils.java
+++ b/src/main/java/org/apache/commons/lang3/CharSetUtils.java
@@ -68,13 +68,26 @@ public class CharSetUtils {
         final StringBuilder buffer = new StringBuilder(str.length());
         final char[] chrs = str.toCharArray();
         final int sz = chrs.length;
-        char lastChar = ' ';
+        char lastChar = chrs[0];
         char ch = ' ';
-        for (int i = 0; i < sz; i++) {
+        Character inChars = null;
+        Character notInChars = null;
+        buffer.append(lastChar);
+        for (int i = 1; i < sz; i++) {
             ch = chrs[i];
-            // Compare with contains() last for performance.
-            if (ch == lastChar && i != 0 && chars.contains(ch)) {
-                continue;
+            if (ch == lastChar) {
+                if ((inChars != null) && (ch == inChars)) {
+                    continue;
+                } else {
+                    if ((notInChars == null) || (ch != notInChars)) {
+                        if (chars.contains(ch)) {
+                            inChars = ch;
+                            continue;
+                        } else {
+                            notInChars = ch;
+                        }
+                    }
+                }
             }
             buffer.append(ch);
             lastChar = ch;

Reply via email to