package ch.nuth.zhaw.exbox; import java.util.HashMap; import java.util.Map; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; public class BracketServer implements CommandExecutor { private static Pattern bracketPattern = Pattern.compile("(/\\*|\\*/|[(){}\\[\\]])"); private static Map bracketPairs; public BracketServer() { super(); bracketPairs = new HashMap<>(); bracketPairs.put("(", ")"); bracketPairs.put("[", "]"); bracketPairs.put("{", "}"); bracketPairs.put("/*", "*/"); } @Override public String execute(String command) throws Exception { return Boolean.toString(checkBrackets(command)) + "\n"; } public boolean checkBrackets(String expression) { ListStack openBrackets = new ListStack(); Matcher matcher = bracketPattern.matcher(expression); Iterable results = () -> matcher.results().iterator(); for (MatchResult result : results) { if (bracketPairs.keySet().contains(result.group())) { openBrackets.push(result.group()); } else if (result.group().equals(bracketPairs.get(openBrackets.peek()))) { openBrackets.pop(); } else { return false; } } return openBrackets.isEmpty(); } }