public class StringBufferTest {  /**
   * @param args
   */
  public static void main(String[] args) {
    StringBuffer str = new StringBuffer("  abc ee    ssss  ");
    System.out.println(str.toString() + '.');
    for (int i = 0; i < str.length(); i++) {
      if (str.charAt(i) <= ' ') {
        str.deleteCharAt(i);
      }
    }
    System.out.println(str.toString() + '.');
  }}显示结果如下:
  abc ee    ssss  .
 abcee  ssss .当有多个空格时只删了其中一部分?

解决方案 »

  1.   

    因为你删了前面的后面的字符会递补,但是数组的index还是在往后移动,所以到后边就跟本不走循环了
      

  2.   

    答:当然是啦.
    当你删除当前i处的空格时,后边的字符会向前移动一个字符,这样:当前已被删的空格的下一个空格其实已经移到你的i处了,但你的循环已回上去,i++了,这样:这个空格就成漏网之鱼了.
    因此:代码可改为如下:
    方法一:循环从串的右边向左边循环
    方法二:你的原来的代码:str.deleteCharAt(i); 之后加上:i--;就行了.
      

  3.   

    同时你的str的长度也在减小,所以有些就被跳过了,没有进行check