ExperimentBox/app/src/main/java/ch/nuth/zhaw/exbox/BracketServer.java

52 lines
1.5 KiB
Java

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<String, String> bracketPairs;
public BracketServer() {
super();
bracketPairs = new HashMap<>() {
{
put("(", ")");
put("[", "]");
put("{", "}");
put("<", ">");
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<MatchResult> results = () -> matcher.results().iterator();
for (MatchResult result : results) {
if (bracketPairs.keySet().contains(result.group())) {
openBrackets.push(result.group());
} else if (
!openBrackets.isEmpty() &&
result.group().equals(bracketPairs.get(openBrackets.peek()))) {
openBrackets.pop();
} else {
return false;
}
}
return openBrackets.isEmpty();
}
}