代码之家  ›  专栏  ›  技术社区  ›  Maxim

调用“substring”是多余的

  •  2
  • Maxim  · 技术社区  · 6 年前

    lint 在IntelliJ IDEA中。确切的消息是

    调用“substring”是多余的

    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
    }
    

    我从来没有遇到过

    3 回复  |  直到 6 年前
        1
  •  9
  •   Stefan Haustein    6 年前

    您可以简化对此的调用:

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

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

        2
  •  4
  •   Axel M    6 年前

    这是因为StringBuilderAppend是用一个函数覆盖的,这个函数也采用类似子字符串的开始索引和结束索引。

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

    你可以用

    sb.append(equation, i + 1, right); 
    
        3
  •  1
  •   Markus    6 年前

    String是CharSequence,StringBuffer有一个append()方法,它的参数与substring()完全相同。您可以取消对substring()的调用。