You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ba...@apache.org on 2011/04/07 06:03:55 UTC

svn commit: r1089724 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java

Author: bayard
Date: Thu Apr  7 04:03:55 2011
New Revision: 1089724

URL: http://svn.apache.org/viewvc?rev=1089724&view=rev
Log:
Implemented the native CharSequence version of toCharArray

Modified:
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.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=1089724&r1=1089723&r2=1089724&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 Apr  7 04:03:55 2011
@@ -6489,8 +6489,12 @@ public class StringUtils {
         if (cs instanceof String) {
             return ((String) cs).toCharArray();
         } else {
-            // TODO: Implement rather than convert to String
-            return cs.toString().toCharArray();
+            int sz = cs.length();
+            char[] array = new char[cs.length()];
+            for (int i=0; i < sz; i++) {
+                array[i] = cs.charAt(i);
+            }
+            return array;
         }
     }
 



Re: svn commit: r1089724 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java

Posted by Henri Yandell <fl...@gmail.com>.
Sounds very reasonable, thanks for watching and commenting :)

Doing the performance check would be valuable (to know the magnitude),
but I agree that the green method shouldn't beat toString().

Hen

On Thu, Apr 7, 2011 at 2:49 AM, Julien Aymé <ju...@gmail.com> wrote:
> Hi,
>
> I think that for char[] based implementation of CharSequence (mainly
> StringBuffer/StringBuilder),
> it would be faster to convert to String (copy char[] once) then invoke
> to charArray method (copy char[] twice).
>
> Indeed, invoking many times charAt(index) may be costly since the
> range check would be done every time,
> and the operations (affect char in char[]) would be done as many time
> as the CharSequence length.
>
> But I may be wrong on this one (with jit optimization magic).
>
> Anyway, thanks for the work on Lang3.
>
> Regards,
> Julien
>
> 2011/4/7  <ba...@apache.org>:
>> Author: bayard
>> Date: Thu Apr  7 04:03:55 2011
>> New Revision: 1089724
>>
>> URL: http://svn.apache.org/viewvc?rev=1089724&view=rev
>> Log:
>> Implemented the native CharSequence version of toCharArray
>>
>> Modified:
>>    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.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=1089724&r1=1089723&r2=1089724&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 Apr  7 04:03:55 2011
>> @@ -6489,8 +6489,12 @@ public class StringUtils {
>>         if (cs instanceof String) {
>>             return ((String) cs).toCharArray();
>>         } else {
>> -            // TODO: Implement rather than convert to String
>> -            return cs.toString().toCharArray();
>> +            int sz = cs.length();
>> +            char[] array = new char[cs.length()];
>> +            for (int i=0; i < sz; i++) {
>> +                array[i] = cs.charAt(i);
>> +            }
>> +            return array;
>>         }
>>     }
>>
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1089724 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.java

Posted by Julien Aymé <ju...@gmail.com>.
Hi,

I think that for char[] based implementation of CharSequence (mainly
StringBuffer/StringBuilder),
it would be faster to convert to String (copy char[] once) then invoke
to charArray method (copy char[] twice).

Indeed, invoking many times charAt(index) may be costly since the
range check would be done every time,
and the operations (affect char in char[]) would be done as many time
as the CharSequence length.

But I may be wrong on this one (with jit optimization magic).

Anyway, thanks for the work on Lang3.

Regards,
Julien

2011/4/7  <ba...@apache.org>:
> Author: bayard
> Date: Thu Apr  7 04:03:55 2011
> New Revision: 1089724
>
> URL: http://svn.apache.org/viewvc?rev=1089724&view=rev
> Log:
> Implemented the native CharSequence version of toCharArray
>
> Modified:
>    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/StringUtils.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=1089724&r1=1089723&r2=1089724&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 Apr  7 04:03:55 2011
> @@ -6489,8 +6489,12 @@ public class StringUtils {
>         if (cs instanceof String) {
>             return ((String) cs).toCharArray();
>         } else {
> -            // TODO: Implement rather than convert to String
> -            return cs.toString().toCharArray();
> +            int sz = cs.length();
> +            char[] array = new char[cs.length()];
> +            for (int i=0; i < sz; i++) {
> +                array[i] = cs.charAt(i);
> +            }
> +            return array;
>         }
>     }
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org