You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Bruno P. Kinoshita (JIRA)" <ji...@apache.org> on 2015/05/01 11:40:06 UTC

[jira] [Commented] (LANG-1040) Javadoc for NumberUtils.isNumber() are not clear enough

    [ https://issues.apache.org/jira/browse/LANG-1040?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14522991#comment-14522991 ] 

Bruno P. Kinoshita commented on LANG-1040:
------------------------------------------

> Or we define exactly what we accept by specifying a grammar in the Javadocs.

I think that's probably the best scenario for users.

I tried using the following code found in [this StackOverflow answer|http://stackoverflow.com/questions/1102891/how-to-check-if-a-string-is-a-numeric-type-in-java] to replace isNumber, and then executed the NumberUtilsTest#testIsNumber test method:

{noformat}
        try {
            Double.parseDouble(str);
        } catch (NumberFormatException e) {
            return false;
        }
        return true;
{noformat}

And the test failed with:

{noformat}
java.lang.AssertionError: Expecting true for isNumber/createNumber using "-0xABC123" but got false and true
{noformat}

Using the Regex version:

{noformat}
        return str.matches("-?\\d+(\\.\\d+)?");
{noformat}

Results in:

{noformat}
java.lang.AssertionError: Expecting true for isNumber/createNumber using ".12345" but got false and true
{noformat}

And the final example:

{noformat}
        NumberFormat formatter = NumberFormat.getInstance();
        ParsePosition pos = new ParsePosition(0);
        formatter.parse(str, pos);
        return str.length() == pos.getIndex();
{noformat}

Gives:

{noformat}
java.lang.AssertionError: Expecting true for isNumber/createNumber using "1234E+5" but got false and true
{noformat}

Maybe we can fix this issue by enhancing the docs with a grammar and some examples of what the method can and cannot handle?

> Javadoc for NumberUtils.isNumber() are not clear enough
> -------------------------------------------------------
>
>                 Key: LANG-1040
>                 URL: https://issues.apache.org/jira/browse/LANG-1040
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.math.*
>    Affects Versions: 3.3.2
>            Reporter: Duncan Jones
>             Fix For: Discussion
>
>
> The Javadocs for {{NumberUtils.isNumber()}} do not clearly define what a valid number is. The current trunk documentation states:
> {quote}Checks whether the String a valid Java number.
> Valid numbers include hexadecimal marked with the 0x or 0X qualifier, octal numbers, scientific notation and numbers marked with a type qualifier (e.g. 123L).
> Non-hexadecimal strings beginning with a leading zero are treated as octal values. Thus the string 09 will return false, since 9 is not a valid octal value. However, numbers beginning with 0. are treated as decimal.
> Null and empty String will return false.{quote}
> In other Jira issues, I've seen people suggest that a number if valid if it can be used when assigning to a suitable Java type. E.g. {{"FOO"}} is a valid number if {{long x = FOO}} is valid (where {{long}} might be another numeric type). If this is the case, we should state it.
> Alternatively, the definition could be in terms of what is accepted by {{createNumber()}}.
> Or we define exactly what we accept by specifying a grammar in the Javadocs.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)