【问题标题】:How to replace all String.equals by StringUtils.equals如何用 StringUtils.equals 替换所有 String.equals
【发布时间】:2015-05-05 06:36:53
【问题描述】:

我想自动替换所有出现的

if(variable!=null && variable.equals(value)) ...

通过

if(StringUtils.equals(variable, value)) ...

以类型感知的方式。这意味着,variablevalue 应该确定String(不仅仅是字典处理,例如使用 awk/perl)。

它还应该足够灵活,可以将value 用作文字以及常量 (final static) 或其他变量或参数——在这种情况下肯定是String 的任何东西。此外,后面可能还有更多的布尔表达式。

我怀疑Java Std API 在这里可能会有所帮助,但代码转换本身并不由该 API 处理,只是对代码的访问。

【问题讨论】:

    标签: java code-translation


    【解决方案1】:

    IntelliJ IDEA 的结构搜索和替换功能能够进行此类转换。请参阅Web help 了解更多信息。

    【讨论】:

      【解决方案2】:

      我使用了JAPA 被称为Java 解析器。这是我使用的最好的代码更改工具。从读取 if 循环中的一行到将其保存回同一源,它拥有一切。值得尝试。

      【讨论】:

      • 好提示,我试过了。但我觉得与该工具的“类型意识”相距不远。我被困在如何找出二进制表达式的两边是否真的是String,即@Override public Node visit(BinaryExpr n, A arg) { Expression left = (Expression) n.getLeft(); Expression right = (Expression) n.getRight(); if(n.getOperator() == BinaryExpr.and) { if(left ...) ... /* how to get to the type??? */ return n; } else { /* default behaviour */ ... } 我不认为 javaparser 适合那个,或者我错过了什么?
      • 你可以识别一些模式使用蛮力的方式来替换。 :)
      • 我不明白,“蛮力”是什么意思?你的意思是javaparser中的perl-ish方法?不,在这种情况下我只坚持使用 perl。
      【解决方案3】:

      如果您使用的是 netbeans,则可以使用自定义重构:

      菜单重构/检查和转换/浏览/新建/编辑脚本:

      <!description="Convert to StringUtils.equals">
      
      $var!=null && $var.equals($val) :: $var instanceof java.lang.String
      => StringUtils.equals($var, $val)
      ;;
      

      【讨论】:

      • 不错。如果你把=&gt; org.apache.commons.lang.StringUtils. 放进去,你也会得到导入。
      猜你喜欢
      • 2011-02-06
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多