如何在大型Java代码库中找到所有天真("+")字符串连接?

Uri*_*Uri 6 java string optimization

我们有一个巨大的代码库,我们怀疑代码中有很多基于"+"的字符串连接可能会受益于StringBuilder/StringBuffer的使用.有没有一种有效的方法或现有的工具来搜索这些,特别是在Eclipse中?

搜索"+"不是一个好主意,因为代码中有很多数学,所以这需要实际分析代码和类型以确定哪些添加涉及字符串.

Mic*_*ers 13

我很确定FindBugs可以检测到这些.如果没有,它仍然非常有用.

编辑:它确实可以在循环中找到连接,这是唯一真正有所作为的时间.


Jon*_*eet 12

只要确保你真正了解它实际上更好用的地方StringBuilder.我不是说你知道,但肯定有很多人会采用这样的代码:

String foo = "Your age is: " + getAge();
Run Code Online (Sandbox Code Playgroud)

并把它变成:

StringBuilder builder = new StringBuilder("Your age is: ");
builder.append(getAge());
String foo = builder.toString();
Run Code Online (Sandbox Code Playgroud)

这只是同一件事的不太可读的版本.通常,天真的解决方案是最好的解决方案.同样有些人担心:

String x = "long line" + 
    "another long line";
Run Code Online (Sandbox Code Playgroud)

实际上,在编译时执行串联.

正如纳桑德所说的那样,找出你是否先遇到问题......

  • 正是如此.这就是FindBugs只检查循环的原因. (7认同)
  • 不仅如此,但编译器(至少是javac)会将大多数这些连接转换为StringBuffer/StringBuilder.append()... (2认同)

nsa*_*ers 10

为什么不使用分析器来查找实际上重要的"天真"字符串连接?如果确实需要,只切换到更详细的StringBuffer.