如下代码:
    StringBuffer buf=new StringBuffer("Hard ");
  String aString = "Waxworks";
  buf.append(aString,3,4);
    System.out.println(buf);原文说明:这个操作将aString的从索引位置3开始的由四个字符组成的子串追加到StringBuffer对象buf中。然后buf对象就会包含字符 串"Hard work"。按照原文的说法应该输出" Hard work "但我运行了是" Hard w "为什么会出现这样的情况?请各位指教有关方法append的有关参数说明等问题 还有是不是默认情况下如果只是append(aString) 就是把字符串追加到字符串缓冲区buf的末尾 

解决方案 »

  1.   

    public StringBuffer append(CharSequence s,
                               int start,
                               int end)将指定 CharSequence 的子序列追加到此序列。 
    按顺序追加参数 s 中的字符,即从索引 start 开始到索引 end 结束的此序列的内容。此序列增加的长度为 end - start。 假设此字符序列的长度在执行 append 方法前为 n。如果 k 小于 n,则新字符序列中索引 k 处的字符等于原序列中索引 k 处的字符;否则它等于参数 s 中索引 k+start-n 处的字符。 如果 s 为 null,则认为 s 参数包含 4 个字符 "null",并以此为根据追加字符。 
    指定者:
    接口 Appendable 中的 append
    参数:
    s - 要追加的序列。
    start - 要追加的子序列的起始索引。
    end - 要追加的子序列的结束索引。 
    返回:
    此对象的一个引用。 
    抛出: 
    IndexOutOfBoundsException 如果 start 或 end 为负;或者 start 大于 end;或者 end 大于 s.length()
      

  2.   

    start - 要追加的子序列的起始索引。 
    end - 要追加的子序列的结束索引。
    buf.append(aString,3,4);
    这个方法的第二个参数为3,第三个为4,因此追加在后面的是由aString的第3个元素开始,长度为4-3=1;
    因为String是从0开始计算的,因此加加StringBuffer后面的是w
      

  3.   

    我感觉是不是这样啊,StringBuffer对象的append()方法的参数,如果是String类型,那么,后面取子串的操作实际是从3开始,取值到4之前的字符串,也就是一个字符w,可以试试buf.append(aString,3,6); 
      

  4.   

    就是这样的,你可以去看看JDK API啊,应该有明确的说明
      

  5.   

    试试:buf.append(aString,0,aString.length-1); 
    或者:buf.append(aString,0,7);
      

  6.   

    额,说的很清楚了,看看JDK API   
      

  7.   

    那请各位再运行一下这段代码:
        StringBuffer buf=new StringBuffer("Hard "); 
      char[] text ={'W','a','x','w','o','r','k','s'};
      buf.append(text ,3,4); // buf包含串"Hard work"
    把text输出一下 那为什么又会是"Hard work”这个结果呢?这里的3,4这俩个参数又作何解释!!!!
      

  8.   

    public StringBuffer append(char[] str,
                               int offset,
                               int len)将 char 数组参数的子数组的字符串表示形式追加到此序列。 
    将 char 数组 str 中的字符按顺序追加到此序列的内容中,从索引 offset 开始。此字符的长度将增加 len。 该方法的最终效果与以下操作过程的效果相同:先使用 String.valueOf(char[]) 方法将参数转换为字符串,然后将所得字符串的字符追加到此字符序列。 
    参数:
    str - 要追加的字符。
    offset - 要追加的第一个 char 的索引。
    len - 要追加的 char 的数量。 
    返回:
    此对象的一个引用。
    第二个参数为3,第三个为4,因此追加在后面的是由aString的第3个元素开始,长度为4;
    楼主,学会看API很重要
    建议你去下个java API 
    碰到不会的多看看
      

  9.   

    楼主的这段代码和开始的代码中,调用的append()其实不是同一个函数,而是不同的重载函数,它们参数的意义是不同的,所以产生的结果也不相同。
    /*这段代码使用的是下面的函数,因为你用的是char[] text
    public StringBuffer append(char[] str,
                               int offset,
                               int len)
    将 char 数组参数的子数组的字符串表示形式追加到此序列。
    将 char 数组 str 中的字符按顺序追加到此序列的内容中,
    从索引 offset 开始。此字符的长度将增加 len。 该方法的最终效果与以下操作过程的效果相同:
    先使用 String.valueOf(char[]) 方法将参数转换为字符串,
    然后将所得字符串的字符追加到此字符序列。 参数:
    str - 要追加的字符。
    offset - 要追加的第一个 char 的索引。
    len - 要追加的 char 的数量。
    返回:
    此对象的一个引用。
    */    StringBuffer buf=new StringBuffer("Hard "); 
        String aString = "Waxworks"; 
        buf.append(aString,3,4); 
        System.out.println(buf); 

    /*这段代码使用的是下面的函数,因为String实现了CharSequence
     * 接口,可以当作一个CharSequence
    public StringBuffer append(CharSequence s,
                               int start,
                               int end)
    将指定 CharSequence 的子序列追加到此序列。
    按顺序追加参数 s 中的字符,即从索引 start 开始到索引 end 
    结束的此序列的内容。此序列增加的长度为 end - start。 假设此字符序列的长度在执行 append 方法前为 n。
    如果 k 小于 n,则新字符序列中索引 k 处的字符等于
    原序列中索引 k 处的字符;否则它等于参数 s 中索引 k+start-n 处的字符。 如果 s 为 null,则认为 s 参数包含 4 个字符 "null",并以此为根据追加字符。 指定者:
    接口 Appendable 中的 append
    参数:
    s - 要追加的序列。
    start - 要追加的子序列的起始索引。
    end - 要追加的子序列的结束索引。
    返回:
    此对象的一个引用。
    抛出:
    IndexOutOfBoundsException 如果 start 或 end 为负;
    或者 start 大于 end;或者 end 大于 s.length
     */
      

  10.   

    明白了!!! 发现自己真的很菜……呵呵……一定多多看API 谢谢各位