62 lines
2.2 KiB
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;
|
|
}
|
|
|
|
} |