-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathParser.java
More file actions
37 lines (29 loc) · 1.02 KB
/
Parser.java
File metadata and controls
37 lines (29 loc) · 1.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package domain.calculator;
import java.util.*;
import java.util.stream.Collectors;
public class Parser {
private final Queue<String> tokenQueue;
public Parser(String expression) {
tokenQueue = new LinkedList<>();
ExpressionValidator validator = new ExpressionValidator();
List<String> tokenList = splitExpressionToList(expression);
validator.validateTokenList(tokenList);
validator.validateTokenSequence(tokenList);
tokenQueue.addAll(tokenList);
}
private List<String> splitExpressionToList(String expression) {
String[] tokens = expression.split(" +");
return filterMeaningfulToken(tokens);
}
private List<String> filterMeaningfulToken(String[] tokens) {
return Arrays.stream(tokens)
.filter(token -> !token.equals(""))
.collect(Collectors.toList());
}
public String nextToken() {
return tokenQueue.poll();
}
public boolean hasNext() {
return !tokenQueue.isEmpty();
}
}