I’m trying to split the input given by the user for my calculator.
For example,
if the user inputs “23+45*(1+1)” I want to this to be split into [23,+,45,*,(,1,+,1,)].
I’m trying to split the input given by the user for my calculator. For
Share
What your looking for is called a lexer. A lexer splits up input into chunks (called tokens) that you can read.
Fortunately, your lexer is pretty simple and can be written by hand. For more complicated lexers, you can use
flex(as in “The Fast Lexical Analyzer”–not Adobe Flex), or (since you’re using Java) ANTLR (note, ANTLR is much more than just a lexer).Simply come up with a list of regular expressions, one for each token to match (note that since your input is so simple, you can probably do away with this list and merge them all into one single regex. However, for more advanced lexers, it helps to do one regex for each token) e.g.
Then start a loop: while there are more characters to be parsed, go through each of your regular expressions and attempt to match them against the beginning of the string. If they match, add the first matched group to your list of input. Otherwise, continue matching (if none of them match, tell the user they have a syntax error).
Pseudocode:
Implementation notes:
^character to all of your regular expressions. This makes sure you anchor your matches against the beginning of the string. My pseudocode assumes you have done this.