package ch.zhaw.ads; import org.junit.platform.engine.support.discovery.SelectorResolver; import java.util.regex.Matcher; import java.util.regex.Pattern; public class BracketServer implements CommandExecutor { private final String openingBracketRegex = "((\\()|(\\[)|(\\{)|(<)|(/\\*))"; private final String closingBracketRegex = "((\\))|(\\])|(\\})|(>)|(\\*/))"; private final Pattern openingBracketPattern = Pattern.compile(openingBracketRegex); private final Pattern closingBracketPattern = Pattern.compile(closingBracketRegex); private final Pattern BracketPattern = Pattern.compile(openingBracketRegex + "|" + closingBracketRegex); @Override public String execute(String command) throws Exception { return checkBrackets(command) ? "true" : "false"; } public boolean checkBrackets (String arg) { Stack stack = new ListStack(); StringBuilder builder = new StringBuilder(arg); Matcher bracketMatcher = BracketPattern.matcher(builder.toString()); while (builder.toString().length() > 0 && bracketMatcher.find()) { String foundString = bracketMatcher.group(); String closingBracket = getClosingBracketForOpening(foundString); Matcher closingBracketMatcher = closingBracketPattern.matcher(foundString); if(closingBracket != null){ stack.push(closingBracket); } else if((closingBracketMatcher.matches()) && !foundString.equals(stack.pop())) { return false; } builder = new StringBuilder(builder.substring(bracketMatcher.end())); bracketMatcher = BracketPattern.matcher(builder.toString()); } if(stack.isEmpty()){ return true; } else { return false; } } private String getClosingBracketForOpening(String openingBracket) { switch (openingBracket){ case "(": return ")"; case "[": return "]"; case "{": return "}"; case "<": return ">"; case "/*": return "*/"; } return null; } }