调用“子字符串”是多余的

时间:2018-09-28 16:43:02

标签: java intellij-idea lint

我已经创建了简单的代码来反转方程式,但是在IntelliJ IDEA中,lint突出显示了两行。确切的消息是

  

对“子字符串”的调用是多余的

final String equation = "20+3*475-2-1*4";

final int size = equation.length();
final StringBuilder sb = new StringBuilder(size);
int right = size;
for (int i = size - 1; i > -1; i--) {
    switch (equation.charAt(i)) {
        case '+': case '-': case '*':
            sb.append(equation.substring(i + 1, right));  // this line
            sb.append(equation.charAt(i));
            right = i;
    }
}
if (right != 0) {
    sb.append(equation.substring(0, right));   // and this line
}

我从未遇到过lint毫无理由地突出显示某些内容的情况。但是现在不知道为什么这些调用是多余的。

3 个答案:

答案 0 :(得分:4)

您可以简化对此的调用:

sb.append(equation, i + 1, right);

这避免了显式的中间字符串构造,从而允许实现直接复制“等式”的所需部分。

答案 1 :(得分:3)

这是因为StringBuilder附加函数被覆盖,该函数还需要像子字符串一样的开始和结束索引。

所以不要使用

sb.append(equation.substring(i + 1, right)); 

您可以使用

sb.append(equation, i + 1, right); 

答案 2 :(得分:1)

字符串是一个CharSequence,而StringBuffer具有一个append()方法,该方法采用与substring()完全相同的参数。您可以消除对substring()的调用。