This proven (and fully commented) regex solution meets OP requirements:
Java regex solution
Output:
r''' String[1] = "1" is valid input. Parsing... value[1] ibase=1 String[2] = "1,2,3" is valid input. Parsing... value[1] ibase=1 value[2] ibase=2 value[3] ibase=3 String[3] = "1-9" is valid input. Parsing... value[1] ibase=1 range=9 String[4] = "1-9,10-19,20-199" is valid input. Parsing... value[1] ibase=1 range=9 value[2] ibase=10 range=19 value[3] ibase=20 range=199 String[5] = "1-8,9,10-18,19,20-199" is valid input. Parsing... value[1] ibase=1 range=8 value[2] ibase=9 value[3] ibase=10 range=18 value[4] ibase=19 value[5] ibase=20 range=199 String[6] = "A" is NOT valid input. String[7] = "1,2," is NOT valid input. String[8] = "1 - 9" is NOT valid input. String[9] = " " is NOT valid input. String[10] = "" is NOT valid input. '''
Note that this solution simply demonstrates how to check the input line and how to parse / extract value components from each line. It does not yet confirm that for range values โโthe second integer is greater than the first. However, this logical check can be easily added.
Edit: 2012-10-24 07:00 Fixed index i for counting from scratch.
ridgerunner
source share