ADS_Praktikum_2/src/ch/zhaw/ads/BracketServer.java

62 lines
2.2 KiB
Java

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;
}
}