Вызов «подстроки» является избыточным - PullRequest
0 голосов
/ 28 сентября 2018

Я создал простой код для обращения к уравнению, но две строки выделены lint в IntelliJ IDEA.Точное сообщение:

Вызов «подстроки» является избыточным

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 голосов
/ 28 сентября 2018

Вы можете упростить вызов этого:

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

Это позволяет избежать явного создания промежуточной строки, что позволяет реализации напрямую скопировать нужную часть «уравнения».

0 голосов
/ 28 сентября 2018

Это потому, что приложение StringBuilder перекрывается с функцией, которая также принимает начальный и конечный индексы как подстрока.

Поэтому вместо использования

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

вы можете просто использовать

sb.append(equation, i + 1, right); 
0 голосов
/ 28 сентября 2018

String - это CharSequence, а StringBuffer имеет метод append (), принимающий в точности те же аргументы, что и substring ().Вы можете исключить вызов substring ().

...