调用 'substring' 是多余的
Call to 'substring' is redundant
我创建了简单的代码来反转方程式,但在 IntelliJ IDEA 中 lint
突出显示了两行。确切消息是
Call to 'substring' is redundant
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
无缘无故突出显示某些内容的情况。但是现在不知道为什么这些调用是多余的。
String 是一个 CharSequence,StringBuffer 有一个 append() 方法,其参数与 substring() 完全相同。您可以消除对 substring() 的调用。
您可以简化对此的调用:
sb.append(equation, i + 1, right);
这避免了显式的中间字符串构造,允许实现直接复制 "equation" 的所需部分。
那是因为 StringBuilder append 被一个函数覆盖,它也像子字符串一样接受开始和结束索引。
所以不用
sb.append(equation.substring(i + 1, right));
你可以直接使用
sb.append(equation, i + 1, right);
我创建了简单的代码来反转方程式,但在 IntelliJ IDEA 中 lint
突出显示了两行。确切消息是
Call to 'substring' is redundant
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
无缘无故突出显示某些内容的情况。但是现在不知道为什么这些调用是多余的。
String 是一个 CharSequence,StringBuffer 有一个 append() 方法,其参数与 substring() 完全相同。您可以消除对 substring() 的调用。
您可以简化对此的调用:
sb.append(equation, i + 1, right);
这避免了显式的中间字符串构造,允许实现直接复制 "equation" 的所需部分。
那是因为 StringBuilder append 被一个函数覆盖,它也像子字符串一样接受开始和结束索引。
所以不用
sb.append(equation.substring(i + 1, right));
你可以直接使用
sb.append(equation, i + 1, right);