java - 这个While 循环可以简化吗?

考虑以下代码。它用于检查字符串是否具有有效的括号但不使用堆栈。

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/

相关文章:

r - 如何创建一个因子但保留基础值,而不仅仅是整数代码?

vba - UDT 能否以任何方式用作方法参数?

c - 我无法理解打印第一个八个数组元素的数组的输出

progress-4gl - 查询仅在运行时才知道名称的数据库表

object-detection - 使用 >450K 个实例训练 Dlib 对象检测

ada - 如何明确指定字 rune 字

electron - 如何将在 Electron 上开发的桌面应用程序打包成.exe?

timeout - Marklogic:XDMP-EXTIME 错误(超出时间限制)

prolog - Prolog数据库的Web访问

d3.js - 使用 d3 v4.0 重新创建集群力布局