Class NumberInput


  • public final class NumberInput
    extends java.lang.Object
    Helper class for efficient parsing of various JSON numbers.

    NOTE! Does NOT validate against maximum length limits: caller must do that if and as necessary.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String NASTY_SMALL_DOUBLE
      Deprecated.
      Since 2.14 -- do not use
    • Constructor Summary

      Constructors 
      Constructor Description
      NumberInput()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static boolean inLongRange​(char[] ch, int off, int len, boolean negative)
      Helper method for determining if given String representation of an integral number would fit in 64-bit Java long or not.
      static boolean inLongRange​(java.lang.String s, boolean negative)
      Similar to inLongRange(char[],int,int,boolean), but with String argument
      static double parseAsDouble​(java.lang.String s, double def)  
      static double parseAsDouble​(java.lang.String s, double def, boolean useFastParser)  
      static int parseAsInt​(java.lang.String s, int def)  
      static long parseAsLong​(java.lang.String s, long def)  
      static java.math.BigDecimal parseBigDecimal​(char[] ch)  
      static java.math.BigDecimal parseBigDecimal​(char[] ch, boolean useFastParser)  
      static java.math.BigDecimal parseBigDecimal​(char[] ch, int off, int len)  
      static java.math.BigDecimal parseBigDecimal​(char[] ch, int off, int len, boolean useFastParser)  
      static java.math.BigDecimal parseBigDecimal​(java.lang.String s)  
      static java.math.BigDecimal parseBigDecimal​(java.lang.String s, boolean useFastParser)  
      static java.math.BigInteger parseBigInteger​(java.lang.String s)  
      static java.math.BigInteger parseBigInteger​(java.lang.String s, boolean useFastParser)  
      static java.math.BigInteger parseBigIntegerWithRadix​(java.lang.String s, int radix, boolean useFastParser)  
      static double parseDouble​(java.lang.String s)  
      static double parseDouble​(java.lang.String s, boolean useFastParser)  
      static float parseFloat​(java.lang.String s)  
      static float parseFloat​(java.lang.String s, boolean useFastParser)  
      static int parseInt​(char[] ch, int off, int len)
      Fast method for parsing unsigned integers that are known to fit into regular 32-bit signed int type.
      static int parseInt​(java.lang.String s)
      Helper method to (more) efficiently parse integer numbers from String values.
      static long parseLong​(char[] ch, int off, int len)  
      static long parseLong​(java.lang.String s)
      Similar to parseInt(String) but for long values.
      static long parseLong19​(char[] ch, int off, boolean negative)
      Parses an unsigned long made up of exactly 19 digits.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • NASTY_SMALL_DOUBLE

        @Deprecated
        public static final java.lang.String NASTY_SMALL_DOUBLE
        Deprecated.
        Since 2.14 -- do not use
        Formerly used constant for a value that was problematic on certain pre-1.8 JDKs.
        See Also:
        Constant Field Values
    • Constructor Detail

      • NumberInput

        public NumberInput()
    • Method Detail

      • parseInt

        public static int parseInt​(char[] ch,
                                   int off,
                                   int len)
        Fast method for parsing unsigned integers that are known to fit into regular 32-bit signed int type. This means that length is between 1 and 9 digits (inclusive) and there is no sign character.

        Note: public to let unit tests call it; not meant to be used by any code outside this package.

        Parameters:
        ch - Buffer that contains integer value to decode
        off - Offset of the first digit character in buffer
        len - Length of the number to decode (in characters)
        Returns:
        Decoded int value
      • parseInt

        public static int parseInt​(java.lang.String s)
        Helper method to (more) efficiently parse integer numbers from String values. Input String must be simple Java integer value. No range checks are made to verify that the value fits in 32-bit Java int: caller is expected to only calls this in cases where this can be guaranteed (basically: number of digits does not exceed 9)

        NOTE: semantics differ significantly from parseInt(char[], int, int).

        Parameters:
        s - String that contains integer value to decode
        Returns:
        Decoded int value
      • parseLong

        public static long parseLong​(char[] ch,
                                     int off,
                                     int len)
      • parseLong19

        public static long parseLong19​(char[] ch,
                                       int off,
                                       boolean negative)
        Parses an unsigned long made up of exactly 19 digits.

        It is the callers responsibility to make sure the input is exactly 19 digits. and fits into a 64bit long by calling inLongRange(char[], int, int, boolean) first.

        Note that input String must NOT contain leading minus sign (even if negative is set to true).

        Parameters:
        ch - Buffer that contains integer value to decode
        off - Offset of the first digit character in buffer
        negative - Whether original number had a minus sign
        Returns:
        Decoded long value
        Since:
        2.15.0
      • parseLong

        public static long parseLong​(java.lang.String s)
        Similar to parseInt(String) but for long values.
        Parameters:
        s - String that contains long value to decode
        Returns:
        Decoded long value
      • inLongRange

        public static boolean inLongRange​(char[] ch,
                                          int off,
                                          int len,
                                          boolean negative)
        Helper method for determining if given String representation of an integral number would fit in 64-bit Java long or not. Note that input String must NOT contain leading minus sign (even if 'negative' is set to true).
        Parameters:
        ch - Buffer that contains long value to check
        off - Offset of the first digit character in buffer
        len - Length of the number to decode (in characters)
        negative - Whether original number had a minus sign (which is NOT passed to this method) or not
        Returns:
        True if specified String representation is within Java long range; false if not.
      • inLongRange

        public static boolean inLongRange​(java.lang.String s,
                                          boolean negative)
        Similar to inLongRange(char[],int,int,boolean), but with String argument
        Parameters:
        s - String that contains long value to check
        negative - Whether original number had a minus sign (which is NOT passed to this method) or not
        Returns:
        True if specified String representation is within Java long range; false if not.
      • parseAsInt

        public static int parseAsInt​(java.lang.String s,
                                     int def)
      • parseAsLong

        public static long parseAsLong​(java.lang.String s,
                                       long def)
      • parseAsDouble

        public static double parseAsDouble​(java.lang.String s,
                                           double def)
        Parameters:
        s - a string representing a number to parse
        def - the default to return if `s` is not a parseable number
        Returns:
        closest matching double (or `def` if there is an issue with `s`) where useFastParser=false
        See Also:
        parseAsDouble(String, double, boolean)
      • parseAsDouble

        public static double parseAsDouble​(java.lang.String s,
                                           double def,
                                           boolean useFastParser)
        Parameters:
        s - a string representing a number to parse
        def - the default to return if `s` is not a parseable number
        useFastParser - whether to use FastDoubleParser
        Returns:
        closest matching double (or `def` if there is an issue with `s`)
        Since:
        2.14
      • parseDouble

        public static double parseDouble​(java.lang.String s)
                                  throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        Returns:
        closest matching double
        Throws:
        java.lang.NumberFormatException - if string cannot be represented by a double where useFastParser=false
        See Also:
        parseDouble(String, boolean)
      • parseDouble

        public static double parseDouble​(java.lang.String s,
                                         boolean useFastParser)
                                  throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        useFastParser - whether to use FastDoubleParser
        Returns:
        closest matching double
        Throws:
        java.lang.NumberFormatException - if string cannot be represented by a double
        Since:
        v2.14
      • parseFloat

        public static float parseFloat​(java.lang.String s)
                                throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        Returns:
        closest matching float
        Throws:
        java.lang.NumberFormatException - if string cannot be represented by a float where useFastParser=false
        Since:
        v2.14
        See Also:
        parseFloat(String, boolean)
      • parseFloat

        public static float parseFloat​(java.lang.String s,
                                       boolean useFastParser)
                                throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        useFastParser - whether to use FastDoubleParser
        Returns:
        closest matching float
        Throws:
        java.lang.NumberFormatException - if string cannot be represented by a float
        Since:
        v2.14
      • parseBigDecimal

        public static java.math.BigDecimal parseBigDecimal​(java.lang.String s)
                                                    throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        Returns:
        a BigDecimal
        Throws:
        java.lang.NumberFormatException - if the char array cannot be represented by a BigDecimal
      • parseBigDecimal

        public static java.math.BigDecimal parseBigDecimal​(java.lang.String s,
                                                           boolean useFastParser)
                                                    throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        useFastParser - whether to use custom fast parser (true) or JDK default (false) parser
        Returns:
        a BigDecimal
        Throws:
        java.lang.NumberFormatException - if the char array cannot be represented by a BigDecimal
        Since:
        v2.15
      • parseBigDecimal

        public static java.math.BigDecimal parseBigDecimal​(char[] ch,
                                                           int off,
                                                           int len)
                                                    throws java.lang.NumberFormatException
        Parameters:
        ch - a char array with text that makes up a number
        off - the offset to apply when parsing the number in the char array
        len - the length of the number in the char array
        Returns:
        a BigDecimal
        Throws:
        java.lang.NumberFormatException - if the char array cannot be represented by a BigDecimal
      • parseBigDecimal

        public static java.math.BigDecimal parseBigDecimal​(char[] ch,
                                                           int off,
                                                           int len,
                                                           boolean useFastParser)
                                                    throws java.lang.NumberFormatException
        Parameters:
        ch - a char array with text that makes up a number
        off - the offset to apply when parsing the number in the char array
        len - the length of the number in the char array
        useFastParser - whether to use custom fast parser (true) or JDK default (false) parser
        Returns:
        a BigDecimal
        Throws:
        java.lang.NumberFormatException - if the char array cannot be represented by a BigDecimal
        Since:
        v2.15
      • parseBigDecimal

        public static java.math.BigDecimal parseBigDecimal​(char[] ch)
                                                    throws java.lang.NumberFormatException
        Parameters:
        ch - a char array with text that makes up a number
        Returns:
        a BigDecimal
        Throws:
        java.lang.NumberFormatException - if the char array cannot be represented by a BigDecimal
      • parseBigDecimal

        public static java.math.BigDecimal parseBigDecimal​(char[] ch,
                                                           boolean useFastParser)
                                                    throws java.lang.NumberFormatException
        Parameters:
        ch - a char array with text that makes up a number
        useFastParser - whether to use custom fast parser (true) or JDK default (false) parser
        Returns:
        a BigDecimal
        Throws:
        java.lang.NumberFormatException - if the char array cannot be represented by a BigDecimal
        Since:
        v2.15
      • parseBigInteger

        public static java.math.BigInteger parseBigInteger​(java.lang.String s)
                                                    throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        Returns:
        a BigInteger
        Throws:
        java.lang.NumberFormatException - if string cannot be represented by a BigInteger
        Since:
        v2.14
      • parseBigInteger

        public static java.math.BigInteger parseBigInteger​(java.lang.String s,
                                                           boolean useFastParser)
                                                    throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        useFastParser - whether to use custom fast parser (true) or JDK default (false) parser
        Returns:
        a BigInteger
        Throws:
        java.lang.NumberFormatException - if string cannot be represented by a BigInteger
        Since:
        v2.15
      • parseBigIntegerWithRadix

        public static java.math.BigInteger parseBigIntegerWithRadix​(java.lang.String s,
                                                                    int radix,
                                                                    boolean useFastParser)
                                                             throws java.lang.NumberFormatException
        Parameters:
        s - a string representing a number to parse
        radix - for parse
        useFastParser - whether to use custom fast parser (true) or JDK default (false) parser
        Returns:
        a BigInteger
        Throws:
        java.lang.NumberFormatException - if string cannot be represented by a BigInteger
        Since:
        v2.15