Author: sebb
Date: Tue Aug 23 12:32:52 2011
New Revision: 1160660

URL: http://svn.apache.org/viewvc?rev=1160660&view=rev
Log:
LANG-746 NumberUtils does not handle upper-case hex: 0X and -0X

Modified:
    
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/math/NumberUtils.java
    commons/proper/lang/trunk/src/site/changes/changes.xml
    
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java

Modified: 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/math/NumberUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/math/NumberUtils.java?rev=1160660&r1=1160659&r2=1160660&view=diff
==============================================================================
--- 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/math/NumberUtils.java
 (original)
+++ 
commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/math/NumberUtils.java
 Tue Aug 23 12:32:52 2011
@@ -428,7 +428,7 @@ public class NumberUtils {
      * <code>BigInteger</code> and from <code>Float</code> to
      * <code>BigDecimal</code>.</p>
      *
-     * <p>If the string starts with <code>0x</code> or <code>-0x</code>, it
+     * <p>If the string starts with <code>0x</code> or <code>-0x</code> (lower 
or upper case), it
      * will be interpreted as a hexadecimal integer.  Values with leading
      * <code>0</code>'s will not be interpreted as octal.</p>
      *
@@ -438,7 +438,7 @@ public class NumberUtils {
      * or trailing spaces will generate NumberFormatExceptions.</p>
      *
      * @param str  String containing a number, may be null
-     * @return Number created from the string
+     * @return Number created from the string (or null if the input is null)
      * @throws NumberFormatException if the value cannot be converted
      */
     public static Number createNumber(String str) throws NumberFormatException 
{
@@ -455,7 +455,7 @@ public class NumberUtils {
             // a wrong value.
             return null;
         }
-        if (str.startsWith("0x") || str.startsWith("-0x")) {
+        if (str.startsWith("0x") || str.startsWith("-0x") || 
str.startsWith("0X") || str.startsWith("-0X")) {
             return createInteger(str);
         }   
         char lastChar = str.charAt(str.length() - 1);

Modified: commons/proper/lang/trunk/src/site/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/site/changes/changes.xml?rev=1160660&r1=1160659&r2=1160660&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/site/changes/changes.xml (original)
+++ commons/proper/lang/trunk/src/site/changes/changes.xml Tue Aug 23 12:32:52 
2011
@@ -22,6 +22,7 @@
   <body>
 
   <release version="3.0.2" date="unreleased" description="September release">  
+    <action type="fix" issue="LANG-746">NumberUtils does not handle upper-case 
hex: 0X and -0X</action>
     <action type="update" issue="LANG-736">CharUtils static final array 
CHAR_STRING is not needed to compute CHAR_STRING_ARRAY</action>
     <action type="fix" issue="LANG-744">StringUtils throws 
java.security.AccessControlException on Google App Engine</action>
     <action type="add" issue="LANG-695">SystemUtils.IS_OS_UNIX doesn't 
recognize FreeBSD as a Unix system</action>

Modified: 
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java?rev=1160660&r1=1160659&r2=1160660&view=diff
==============================================================================
--- 
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
 (original)
+++ 
commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java
 Tue Aug 23 12:32:52 2011
@@ -193,8 +193,10 @@ public class NumberUtilsTest {
         assertEquals("createNumber(String) 6 failed", Long.valueOf(12345), 
NumberUtils.createNumber("12345l"));
         assertEquals("createNumber(String) 7 failed", 
Float.valueOf("-1234.5"), NumberUtils.createNumber("-1234.5"));
         assertEquals("createNumber(String) 8 failed", 
Integer.valueOf("-12345"), NumberUtils.createNumber("-12345"));
-        assertTrue("createNumber(String) 9 failed", 0xFADE == 
NumberUtils.createNumber("0xFADE").intValue());
-        assertTrue("createNumber(String) 10 failed", -0xFADE == 
NumberUtils.createNumber("-0xFADE").intValue());
+        assertTrue("createNumber(String) 9a failed", 0xFADE == 
NumberUtils.createNumber("0xFADE").intValue());
+        assertTrue("createNumber(String) 9b failed", 0xFADE == 
NumberUtils.createNumber("0Xfade").intValue());
+        assertTrue("createNumber(String) 10a failed", -0xFADE == 
NumberUtils.createNumber("-0xFADE").intValue());
+        assertTrue("createNumber(String) 10b failed", -0xFADE == 
NumberUtils.createNumber("-0Xfade").intValue());
         assertEquals("createNumber(String) 11 failed", 
Double.valueOf("1.1E200"), NumberUtils.createNumber("1.1E200"));
         assertEquals("createNumber(String) 12 failed", 
Float.valueOf("1.1E20"), NumberUtils.createNumber("1.1E20"));
         assertEquals("createNumber(String) 13 failed", 
Double.valueOf("-1.1E200"), NumberUtils.createNumber("-1.1E200"));


Reply via email to