【发布时间】:2018-04-12 15:36:21
【问题描述】:
我有以下代码:
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);
}
确实,这会从电话号码中删除破折号,但直觉上我希望它会删除破折号之前的字符(因为 --)。这如何/为什么起作用?此外,我发现如果我使用 ++ 或完全省略增量/减量,破折号仍然会被删除。
【问题讨论】:
-
您在 for 循环中检查其内容期间正在更改对象......
-
i--将未更改的i提供给该方法,然后递减该值。这与您拨打deleteCharAt(i); i--;相同。--i操作符在提供方法之前会递减它。 -
如果要删除破折号前的 de 字符,请使用
--i -
停止使用内联后缀和中缀操作。
-
公平地说,这是减少索引的“正确”解决方案,因为您直接更新字符串。但我更喜欢简单地从头开始阅读,这样我就不必为新的长度而烦恼了。
标签: java