如何将字符串连接替换为StringBuilder追加?

3

如何递归地将Java中toString方法中所有的字符串连接替换为StringBuilder?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?你选择了很多其他标签,却忘记指定一种语言。 - Cody Gray
@Code Gray - 你能在Eclipse中开发C#吗?另外驼峰命名法是一个很明显的线索...;-) - Jakub Konecki
4
你希望这么做的原因是什么?我认为,一旦Java编译器完成编译,你的这两个代码块几乎完全相同。 - Jack Leow
5个回答

14

这是Eclipse的内置命令。

  • 单击字符串连接中的引号(")之一。
  • 调出“快速修复”菜单(在键盘上按Ctrl + 1)。
  • 选择使用'StringBuilder'进行字符串连接

神奇!您的

    return "foo" + "bar";

改为

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

2

我没有听说过有适用于Eclipse的插件 - 所以请忽略这个与主题无关的答案 - 但是IntelliJ有一个"意图"可以为您完成此操作(至少在10.0版本中可以)。如果您想尝试,可以使用社区版


1

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

", ([a-zA-z0-9]+)=" \+ CommonHelper\.isNotNull\(([a-zA-z0-9]+)\)  // Find this

append(", $1=").append(CommonHelper.isNotNull($2))    // and replace with this

它不完整,但你可以得到思路。


0
为什么不在你的类中重写toString方法,并实现StringBuilder的append呢?

0

我认为没有任何插件可以为您完成这项工作...无论如何这都是无用的:Java编译器将比任何人都做得更好(如果“StringBuilder”被更好的东西所取代,Java编译器将能够使用这个“更好的东西”,如果您不明确地使用StringBuilder)。


到目前为止,编译器用 StringBuilder 替换了每个单独的字符串连接。从微观优化的角度来看,这是昂贵的。a + b + c 变成了 new sb( new sb(a + b) + c ) - DerMike
你确定吗?如果我没记错的话,这种情况(每个“+”一个StringBuilder)只会在编译器无法使用“append”(例如,在for循环中)时发生。类似于这样:https://dev59.com/JnM_5IYBdhLWcg3wn0vT - Kellindil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接