Class GeneralParser


  • public class GeneralParser
    extends java.lang.Object
    This class provides several static convenience functions for parsing various types of character sequences. In most cases, we use a CharacterIterator to represent the sequence of characters being parsed.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static java.math.BigDecimal MILLIS_IN_DAY  
      private static java.math.BigDecimal MILLIS_IN_HOUR  
      private static java.math.BigDecimal MILLIS_IN_MINUTE  
      private static java.math.BigDecimal MILLIS_IN_SECOND  
      private static java.math.BigDecimal MILLIS_IN_WEEK
      These statics represent some information about how many milliseconds are in various measures of time.
    • Constructor Summary

      Constructors 
      Constructor Description
      GeneralParser()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.math.BigDecimal parseBigDecimal​(java.text.CharacterIterator i)
      This assumes there is a decimal number waiting on the iterator.
      static void parseDigitString​(java.text.CharacterIterator i, java.lang.StringBuffer digit_str)
      Parses a string of 0 or more digits and appends the digits into the string buffer.
      static java.math.BigDecimal parseTimeMeasure​(java.text.CharacterIterator i)
      Parses a time grammer waiting on the character iterator.
      static void parseWordString​(java.text.CharacterIterator i, java.lang.StringBuffer word_buffer)
      Parses a string of 0 or more words and appends the characters into the string buffer.
      static void skipWhiteSpace​(java.text.CharacterIterator i)
      Moves the iterator past any white space.
      • Methods inherited from class java.lang.Object

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

      • MILLIS_IN_WEEK

        private static final java.math.BigDecimal MILLIS_IN_WEEK
        These statics represent some information about how many milliseconds are in various measures of time.
      • MILLIS_IN_DAY

        private static final java.math.BigDecimal MILLIS_IN_DAY
      • MILLIS_IN_HOUR

        private static final java.math.BigDecimal MILLIS_IN_HOUR
      • MILLIS_IN_MINUTE

        private static final java.math.BigDecimal MILLIS_IN_MINUTE
      • MILLIS_IN_SECOND

        private static final java.math.BigDecimal MILLIS_IN_SECOND
    • Constructor Detail

      • GeneralParser

        public GeneralParser()
    • Method Detail

      • parseDigitString

        public static void parseDigitString​(java.text.CharacterIterator i,
                                            java.lang.StringBuffer digit_str)
        Parses a string of 0 or more digits and appends the digits into the string buffer.
      • parseWordString

        public static void parseWordString​(java.text.CharacterIterator i,
                                           java.lang.StringBuffer word_buffer)
        Parses a string of 0 or more words and appends the characters into the string buffer.
      • skipWhiteSpace

        public static void skipWhiteSpace​(java.text.CharacterIterator i)
        Moves the iterator past any white space. White space is ' ', '\t', '\n' and '\r'.
      • parseBigDecimal

        public static java.math.BigDecimal parseBigDecimal​(java.text.CharacterIterator i)
                                                    throws java.text.ParseException
        This assumes there is a decimal number waiting on the iterator. It parses the decimal and returns the BigDecimal representation. It throws a GeneralParseException if we are unable to parse the decimal.
        Throws:
        java.text.ParseException
      • parseTimeMeasure

        public static java.math.BigDecimal parseTimeMeasure​(java.text.CharacterIterator i)
                                                     throws java.text.ParseException
        Parses a time grammer waiting on the character iterator. The grammer is quite simple. It allows for us to specify quite precisely some unit of time measure and convert it to a Java understandable form. It returns the number of milliseconds that the unit of time represents. For example, the string '2.5 hours' would return: 2.5 hours * 60 minutes * 60 seconds * 1000 milliseconds = 9000000

        To construct a valid time measure, you must supply a sequence of time measurements. The valid time measurements are 'week(s)', 'day(s)', 'hour(s)', 'minute(s)', 'second(s)', 'millisecond(s)'. To construct a time, we simply concatinate the measurements together. For example, '3 days 22 hours 9.5 minutes'

        It accepts any number of time measurements, but not duplicates of the same.

        The time measures are case insensitive. It is a little lazy how it reads the grammer. We could for example enter '1 hours 40 second' or even more extreme, '1 houraboutit 90 secondilianit' both of which are acceptable!

        This method will keep on parsing the string until the end of the iterator is reached or a non-numeric time measure is found. It throws a ParseException if an invalid time measure is found or a number is invalid (eg. -3 days).

        LOCALE ISSUE: This will likely be a difficult method to localise.

        Throws:
        java.text.ParseException