Java 中的StringBuffer

原文:https://www.studytonight.com/java/stringbuffer-class.php

StringBuffer 类用于创建一个可变的字符串对象。意思是,创建后可以更改。它代表可增长和可写的字符序列。

它类似于 Java 中的 string 类,两者都是用来创建 String 的,但是 stringbuffer 对象是可以更改的。

所以 StringBuffer 类在我们必须对字符串进行大量修改时使用。它也是线程安全的,即多个线程不能同时访问它。StringBuffer 定义了 4 个构造器。

  1. StringBuffer ():它创建一个空的字符串缓冲区,并为 16 个字符保留空间。
  2. StringBuffer (int size):它创建一个空字符串,并接受一个整数参数来设置缓冲区的容量。
  3. StringBuffer (String str):它从指定的字符串创建 StringBuffer 对象。
  4. StringBuffer(charSequence[]ch):它从 charSequence 数组中创建一个 StringBuffer 对象。

示例:创建字符串填充对象

在本例中,我们使用 StrigBuffer 类创建字符串缓冲区对象,并测试其可变性。

public class Demo {

    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer("study");
        System.out.println(sb);
        // modifying object
        sb.append("tonight");
        System.out.println(sb);    // Output: studytonight

    }
}

今晚学习

示例:字符串和字符串缓冲区的区别

在这个例子中,我们正在创建 String 和 stringbuffer 类的对象并修改它们,但是只有 StringBuffer 对象被修改。见下面的例子。

class Test {
 public static void main(String args[])
 {
  String str = "study";
  str.concat("tonight");
  System.out.println(str);      // Output: study

  StringBuffer strB = new StringBuffer("study");
  strB.append("tonight");
  System.out.println(strB);    // Output: studytonight
 }
}

今晚学习

解释:

输出是这样的,因为字符串对象是不可变的对象。因此,如果我们连接在同一个字符串对象上,它不会被改变,但是 StringBuffer 会创建可变对象。因此,它可以被改变。


StringBuffer 类的重要方法

以下方法是 StringBuffer 类中一些最常用的方法。

追加()

这个方法将把任何类型数据的字符串表示连接到 StringBuffer 对象的末尾。append()方法有几种重载形式。

StringBuffer append(String str)
StringBuffer append(int n)
StringBuffer append(Object obj)

每个参数的字符串表示被附加到 StringBuffer 对象。

public class Demo {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("test");
        str.append(123);
        System.out.println(str);
    }
}



插入()

此方法将一个字符串插入另一个字符串。以下是insert()法的几种形式。

StringBuffer insert(int index, String str)
StringBuffer insert(int index, int num)
StringBuffer insert(int index, Object obj)

这里第一个参数给出了字符串将被插入的位置的索引,第二个参数的字符串表示被插入到 StringBuffer 对象中。

public class Demo {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("test");
        str.insert(2, 123);
        System.out.println(str);
    }
}



反向()

该方法反转一个 StringBuffer 对象中的字符。

public class Demo {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("Hello");
        str.reverse();
        System.out.println(str);
    }
}

奥利

替换()

此方法将字符串从指定的开始索引替换为结束索引。

public class Demo {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer("Hello World");
        str.replace( 6, 11, "java");
        System.out.println(str);
    }
}

你好 java

容量()

该方法返回 StringBuffer 对象的当前容量。

public class Demo {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer();
        System.out.println( str.capacity() );
    }
}

Sixteen

注意:空构造器保留 16 个字符的空间。因此输出为 16。


保证能力()

该方法用于保证 StringBuffer 对象的最小容量。

如果 ensureCapacity()方法的参数小于现有容量,则现有容量不会发生变化。

如果 ensureCapacity()方法的参数大于现有容量,则使用以下规则会改变当前容量:新容量=(旧容量*2) + 2

public class Demo {
    public static void main(String[] args) {
        StringBuffer str = new StringBuffer();
        System.out.println( str.capacity()); //output: 16 (since empty constructor reserves space for 16 characters)
        str.ensureCapacity(30); //greater than the existing capacity
        System.out.println( str.capacity()); //output: 34 (by following the rule - (oldcapacity*2) + 2.) i.e (16*2)+2 = 34.
    }
}

16 34