`

StringBuffer的setLength

    博客分类:
  • java
阅读更多

经常用stringbuffer来代替string 一般都是在循环中使用 我在下一次使用时会调用setLength(0)已清空字符串

今天我偶然在debug中查看stringbuffer 

惊讶的发现 原来我以前对setLength的理解是错误的

我以前认为length为x 就保留x个char 

但事实是 设置setLength后 sb中的char一个都没有删除 全部保留了 它只是把内部属性count设置为x

如果你写入新的字符会把之前的字符覆盖

所以如果你之前有一个很长的字符串在stringbuffer中 想要清除的话 就要用delete(start, end)

分享到:
评论
3 楼 zhouxiaoli521 2013-12-05  
zhouxiaoli521 写道
weinifk 写道
public static void main(String[] args) {
StringBuffer test = new StringBuffer("");
test.append("abcdefhhijklmnopqrstuvwxyz");
System.out.println("length:" + test.length() + test.toString());
test.setLength(0);
test.append("wolegequde...");
System.out.println("length:" + test.length() + test.toString());
//test.delete(0, test.length());
}


输出结果:
length:26abcdefhhijklmnopqrstuvwxyz
length:13wolegequde...

   public void setLength(int newLength) {
 if (newLength < 0)
     throw new StringIndexOutOfBoundsException(newLength);
 if (newLength > value.length)
     expandCapacity(newLength);

 if (count < newLength) {
     for (; count < newLength; count++)
  value[count] = '\0';
 } else {
            count = newLength;
        }
    }


最简单的方式 debug看一下value里的值
2 楼 zhouxiaoli521 2013-12-05  
weinifk 写道
public static void main(String[] args) {
StringBuffer test = new StringBuffer("");
test.append("abcdefhhijklmnopqrstuvwxyz");
System.out.println("length:" + test.length() + test.toString());
test.setLength(0);
test.append("wolegequde...");
System.out.println("length:" + test.length() + test.toString());
//test.delete(0, test.length());
}


输出结果:
length:26abcdefhhijklmnopqrstuvwxyz
length:13wolegequde...

   public void setLength(int newLength) {
 if (newLength < 0)
     throw new StringIndexOutOfBoundsException(newLength);
 if (newLength > value.length)
     expandCapacity(newLength);

 if (count < newLength) {
     for (; count < newLength; count++)
  value[count] = '\0';
 } else {
            count = newLength;
        }
    }
1 楼 weinifk 2013-12-04  
public static void main(String[] args) {
StringBuffer test = new StringBuffer("");
test.append("abcdefhhijklmnopqrstuvwxyz");
System.out.println("length:" + test.length() + test.toString());
test.setLength(0);
test.append("wolegequde...");
System.out.println("length:" + test.length() + test.toString());
//test.delete(0, test.length());
}


输出结果:
length:26abcdefhhijklmnopqrstuvwxyz
length:13wolegequde...

相关推荐

    StringBuffer

    4. **`setLength(int newLength)`** - 改变`StringBuffer`的长度。如果新长度小于当前长度,则截断;如果大于当前长度,则填充空格。 5. **`charAt(int where)`** - 返回`StringBuffer`中指定位置的字符。 6. **`...

    面试题java StringBuffer和StringBuilder类常见操作和用法

    在Java编程语言中,StringBuffer和StringBuilder类是处理可变字符串序列的重要工具。它们提供了丰富的功能,如添加、插入、删除、替换字符,以及反转字符串序列等。由于这两个类的特性,它们在处理大量字符串操作时...

    StringBuffer帮你减轻Java的负担

    - `setLength(int length)`:设置`StringBuffer`的长度,多余的字符会被删除,不足的字符位置会被填充为'\0'。 - `ensureCapacity(int minimumCapacity)`:确保`StringBuffer`至少具有指定的最小容量,如果不足,则...

    StringStringBuffer区别例子

    但`StringBuffer`和`StringBuilder`还提供了额外的`setLength()`方法,可以改变字符串的长度,这是`String`不具备的功能。 在性能对比上,`String`的连接操作在循环中尤其昂贵,因为每次都会创建新的对象。`...

    JAVA字符串处理函数

    - **`setLength(int len)`**:设置 `StringBuffer` 的长度为 `len`。 - **`charAt(int where)`** 和 **`setCharAt(int where, char ch)`**:获取或设置指定位置的字符。 - **`getChars(int sourceStart, int ...

    java字符串操作大全

    - `StringBuffer(CharSequence chars)`:创建一个包含指定字符序列内容的`StringBuffer`对象。 ##### (1) 获取长度和容量:`length()` 和 `capacity()` - `length()` 方法返回`StringBuffer`对象当前的长度。 - `...

    JAVA字符串处理函数列表一览

    - `setLength(int len)`: 设置`StringBuffer`的长度。 - `charAt(int where)`: 获取指定位置的字符。 - `setCharAt(int where, char ch)`: 修改指定位置的字符。 - `getChars(int sourceStart, int sourceEnd, ...

    Java程序设计课件:5 数组与字符串.ppt

    `StringBuffer`的长度和容量可以通过`.length()`和`.capacity()`获取,容量可以通过`.setLength(newLength)`进行调整。将`StringBuffer`内容转换为`String`使用`.toString()`方法。 在实际编程中,我们需要根据具体...

    Java字符串的方法.pdf

    - `setLength(int newLength)`:设置`StringBuffer`的长度,超出部分会被删除,不足部分会被填充空字符。 以上就是Java中关于字符串操作的一些主要方法和`StringBuffer`类的基本使用。这些方法在处理和操作字符串...

    第4 - 5章作业1

    使用 `s.setLength(0)` 或 `s = new StringBuffer()` 可以清空 `StringBuffer` 对象 `s` 的内容。 4. **字符串对象的创建与比较**: - `String s1 = "Welcome";` 和 `String s2 = new String("Welcome");` 都创建...

    java中常用的字符串的截取方法[文].pdf

    18. `StringBuffer`:线程安全的字符串构建器,提供了构造函数如`StringBuffer()`, `StringBuffer(int size)`, `StringBuffer(String str)` 和 `StringBuffer(CharSequence chars)`。它具有`length()`(获取当前长度...

    实验一 Java常用工具类编程.doc

    - `setLength(int newLength)`截断或扩展缓冲区至指定长度。 - `append()`追加任意类型的数据到缓冲区,返回自身对象,便于链式操作。 - `insert(int offset, Object obj)`在指定位置插入数据。 - `reverse()`...

    java以单词的维度反转字符串(中间的空格不确定,并不可以缺少)

    StringBuffer reverseStr = new StringBuffer(); List&lt;StringBuffer&gt; finalStr = new ArrayList(); for (int i = 0; i ; i++) { if (!strArray[i].equals("")) { // 处理单词 if (word.length() &gt; 0) { ...

    从DELPHI到JAVA转换.docx

    解决方法是使用StringBuffer类,例如:`StringBuffer s = new StringBuffer();s.Append('a string');`。 2. 数组 在Delphi中,数组声明使用var关键字,例如:`var a:array of string;SetLength(10);`。而在Java中...

    **Java字符串的方法

    - `setLength(int len)`: 设置字符串缓冲区的长度。 - `charAt(int where)`: 获取指定索引处的字符。 - `setCharAt(int where, char ch)`: 设置指定索引处的字符。 - `getChars(int sourceStart, int sourceEnd, ...

    java数据流

    2. 操作`StringBuffer`:创建一个`StringBuffer`对象,使用`append()`方法添加字符串,`setLength(0)`清空,`delete()`方法删除特定部分。 3. 键盘输入:使用`Scanner`类从`System.in`获取用户输入,判断输入是否为...

    Java复习总结.doc

    方法包括 `length()`,`capacity()`,`ensureCapacity(int size)` 设置容量,`setLength(int len)` 修改长度,`charAt(int index)`,`setCharAt(int index, char c)` 修改单个字符,`getChars(int start, int end, ...

    JAVA字符串处理函数列表一览.

    - `setLength(int len)` —— 设置长度。 - `charAt(int where)` 和 `setCharAt(int where, char ch)` —— 获取和设置指定位置的字符。 - `getChars(int sourceStart, int sourceEnd, char target[], int target...

    JAVA字符串函数一览.txt

    - `setLength(int len)`: 设置长度。 - `charAt(int where)`: 获取指定位置的字符。 - `setCharAt(int where, char ch)`: 设置指定位置的字符。 - `getChars(int sourceStart, int sourceEnd, char[] target, ...

Global site tag (gtag.js) - Google Analytics