【问题标题】:How replace String catenation to StringBuilder append?如何将字符串连接替换为 StringBuilder 追加?
【发布时间】:2011-06-19 18:29:20
【问题描述】:

如何递归地将 toString 方法中的所有连接替换为 StringBuilder for Java? eclipse中有这样的插件吗? 例如: 替换它:

    return "AccountAddresses ["
            + ", corporateAddresses=" + CommonHelper.isNotNull(corporateAddresses)
            + ", corporateDeliveryMinimum=" + corporateDeliveryMinimum
            + ", depot=" +  CommonHelper.isNotNull(depot)
            + ", depotDeliveryMinimum=" + depotDeliveryMinimum
            + ", preSelectedId=" + preSelectedId
            + ", residentialAddresses=" +  CommonHelper.isNotNull(residentialAddresses)
            + ", residentialDeliveryMinimum=" + residentialDeliveryMinimum
            + "]";

此时:

    return new StringBuilder("AccountAddresses [")
            .append(", corporateAddresses=").append(CommonHelper.isNotNull(corporateAddresses))
            .append(", corporateDeliveryMinimum=").append(corporateDeliveryMinimum)
            .append(", depot=").append(CommonHelper.isNotNull(depot))
            .append(", depotDeliveryMinimum=").append(depotDeliveryMinimum)
            .append(", preSelectedId=").append(preSelectedId)
            .append(", residentialAddresses=").append(CommonHelper.isNotNull(residentialAddresses))
            .append(", residentialDeliveryMinimum=").append(residentialDeliveryMinimum)
            .append("]").toString();

【问题讨论】:

  • 您使用哪种编程语言?那是C#还是Java?您选择了太多其他标签,忘记指定语言。
  • @Code Gray - 你能在 Eclipse 中开发 C# 吗?骆驼肠衣也是赠品...... ;-)
  • 您有这样做的理由吗?我相信你的两个代码块或多或少是相同的,一旦 Java 编译器完成了它。

标签: java eclipse-plugin tostring stringbuilder


【解决方案1】:

它是 Eclipse 的内置命令。

  • 单击字符串连接中的一个引号 (")。
  • 打开Quick Fix 菜单(在键盘上点击Ctrl + 1)。
  • 选择Use 'StringBuilder' for String concatenation

魔法!你的

    return "foo" + "bar";

改为

    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("foo");
    stringBuilder.append("bar");
    return stringBuilder.toString();

【讨论】:

    【解决方案2】:

    我还没有听说过一个 Eclipse 插件 - 所以请随意忽略这个离题的答案 - 但 IntelliJ 有一个“意图”会为你做这件事(至少在 10.0 中它确实如此)。如果您想试一试,可以使用community edition

    【讨论】:

      【解决方案3】:

      进行正则表达式搜索和替换:

      ", ([a-zA-z0-9]+)=" \+ CommonHelper\.isNotNull\(([a-zA-z0-9]+)\)  // Find this
      
      append(", $1=").append(CommonHelper.isNotNull($2))    // and replace with this
      

      它不完整,但你明白了。

      【讨论】:

        【解决方案4】:

        为什么不重写类中的 toString 方法,并实现 stringbuilder 追加。

        【讨论】:

          【解决方案5】:

          我认为任何插件都不会为您做到这一点......无论如何这都是无用的:Java 编译器会比任何人都做得更好(如果“StringBuilder”被更好的东西取代,Java 编译器如果您不明确使用 StringBuilder 将能够使用这个“更好的东西”)。

          【讨论】:

          • 现在编译器用 StringBuilder 替换每一个连接。这是昂贵的(从微优化剧院的角度来看)。 a + b + c 变为 new sb( new sb(a + b) + c )
          • 你确定吗?如果我没记错的话,这种情况(每个“+”一个 StringBuilder)只会在编译器无法使用“appends”(例如,在 for 循环中)时发生。像这样的东西:stackoverflow.com/questions/1296571/…
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-06
          • 1970-01-01
          • 2013-03-07
          • 2023-03-08
          • 2011-07-22
          • 1970-01-01
          相关资源
          最近更新 更多