用Java或Java删除Java deleteCharAt

时间:2017-10-31 12:49:38

标签: java

我有以下代码:

public static void main(String[] args) {
    StringBuilder phoneNumber = new StringBuilder("828-707-5634");
    for(int i = 0; i < phoneNumber.length(); i++)
    {
      if (phoneNumber.charAt(i) == '-')
        phoneNumber.deleteCharAt(i--);
    }

    System.out.print(phoneNumber);
}

确实这会从电话号码中移除破折号,但直观地说我会期望它在破折号之前移除角色(因为 - )。这是如何工作的?另外,我发现如果我使用++或完全省略增量/减量,则仍然会删除破折号。

1 个答案:

答案 0 :(得分:2)

deleteCharAt收到i未分配值,因为表达式 i--的值是未增加的值。这就是你的代码工作的原因,即使你依赖for循环的增量表达式来弥补i中相当人为的,毫无意义的减少。这对我来说似乎相当粗糙,如果第一个字符是短划线,那么i为-1会在调试期间引起人们的注意。

最好在replace中使用java.lang.String方法。见replace String with another in java

否则,我更喜欢

for (int i = 0; i < phoneNumber.length(); /*intentionally empty*/){
    if (phoneNumber.charAt(i) == '-'){
        phoneNumber.deleteCharAt(i);
    } else {
        ++i;
    }
}

虽然由于length()的重复评估,这仍是O(N 2 )O(N)问题的解决方案!这可以通过向后运行循环来解决,这也将减少元素混洗的次数:

for (int i = -1 + phoneNumber.length(); i >= 0; /*intentionally empty*/){
    if (phoneNumber.charAt(i) == '-'){
        phoneNumber.deleteCharAt(i);
    } else {
        --i;
    }
}