考虑以下代码。它用于检查字符串是否具有有效的括号但不使用堆栈。
public boolean isValid(String input) {
while(input.length() != (input = input.replaceAll("\\(\\)|\\[\\]|\\{\\}", "")).length());
return input.isEmpty();
}
但是有点难以理解。这可以简化吗?不添加更多新行?
最佳答案
如果您首先格式化并正确缩进它会有所帮助:
public boolean isValid_2(String input) {
while(input.length() != (input = input.replaceAll("\\(\\)|\\[\\]|\\{\\}", "")).length())
;
return input.isEmpty();
}
接下来,请注意该方法不依赖于其类的实例,因此可以是静态的。此外,从正则表达式中删除多余的转义:public static boolean isValid_3(String input) {
while(input.length() != (input = input.replaceAll("\\(\\)|\\[]|\\{}", "")).length())
;
return input.isEmpty();
}
最后,将复杂的语句分解成易于理解的部分,并引入一些名称有意义的变量,然后将循环类型更改为更有用的类型,您就拥有了最终版本:public static boolean isValid_4(String input) {
int oldLength, newLength;
do {
oldLength = input.length();
input = input.replaceAll("\\(\\)|\\[]|\\{}", "");
newLength = input.length();
} while (oldLength != newLength);
return input.isEmpty();
}
https://stackoverflow.com/questions/63191319/