首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

Java : 如何找到代码中写了 if 但没有最终 else 的代码片段?

  •  
  •   c4f36e5766583218 · 177 天前 · 1216 次点击
    这是一个创建于 177 天前的主题,其中的信息可能已经有所发展或是发生改变。
    if (1==1) {
     // if
    } else {
     // else
    }
    
    if (1==1) {
     // if
    } else if {
     // else if
    }
    
    if (1==1) {
     // if
    }
    

    就找到类似找到第 2,3 个这样的代码片段。checkstyle 可以做到吗?或者有其它检查工具吗?

    11 回复  |  直到 2019-04-26 17:16:07 +08:00
        1
    geelaw   177 天前 via iPhone
    你可以写一个 custom check 来完成这件事情。如果你想找到所有没有 else 的 if,你只需要关注 { } if else 四个 token 即可;如果你只想判断是否存在没有 else 的 if,你只需要关注 if else 这两个 token。
        2
    stevenbipt   177 天前 via Android
    第一想法是通过栈实现,类似于匹配括号的想法,遇到 if 就入栈,遇到 else 出栈,去户县栈没空遇到下一个 if 那缺失应该就是在这一段之间
        3
    Mogugugugu   177 天前   ♥ 1
    sonar 可以,idea 装一个 sonar lint 插件,然后在 rules 里面可以找到这条规则 需要自己手动开启,默认没有打开。
        4
    c4f36e5766583218   177 天前
    @Mogugugugu #3 好的,谢谢。https://www.sonarsource.com/products/sonarlint/ SonarLint 的官网打不开 2333
        6
    night98   177 天前
    https://blog.csdn.net/linsongbin1/article/details/80211919
    直接拉到末尾处,参考他这种方法
        7
    c4f36e5766583218   177 天前
    @night98 #6 看了下,“按照模板找内容” 好像解决我的问题。。(不过这篇博文蛮不错的
        8
    c4f36e5766583218   177 天前
    @Mogugugugu #3 测试了下,发现有 else if 后面是否需要 else 的检查,但没有 if 后面是否需要 else 的检查。23333
        9
    c4f36e5766583218   177 天前
    @stevenbipt #2 我觉得有空还是用 2 楼说的,Python/Java 自写一个比较好,2333 因为感觉 if 后面好多情况都是不用写 else 的,所以一些现有工具也没加这个功能。
        10
    stevenbipt   177 天前
    @c4f36e5766583218 #9 那就搞一个~目测难度也不高
        11
    geelaw   175 天前 via iPhone
    @stevenbipt #2 if { if {} else {} } else {} 不缺少 else,但你的算法会觉得缺少。正确的算法必须能够知道现在出现的 else 是哪个 if 的,为此需要追踪 { }——把 if 和 else 设置为一种括号,{ 和 } 设置为另一种括号,源代码是合法 Java 代码且每个 if 都有 else,当且仅当这个序列是合法括号序列。

    另外不太理解为什么要单独列出 2、3 两个例子,2 和 3 是同一种情况,处理了 3 自然就会找到 2。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   872 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 21:41 · PVG 05:41 · LAX 14:41 · JFK 17:41
    ♥ Do have faith in what you're doing.