2021-04-18 11:13  阅读(110)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-data-type.html

Java数据类型教程 - Java StringBuilder/StringBuffer

StringBuilder和StringBuffer是String类的伴随类。

它们表示一个可变的字符序列。

StringBuffer是线程安全的,StringBuilder不是线程安全的。

两个类都有相同的方法,除了StringBuffer中的所有方法都是同步的。

StringBuilder对象是可修改的字符串。 StringBuilder类包含四个构造函数:

    StringBuilder()
    StringBuilder(CharSequence seq)
    StringBuilder(int capacity)
    StringBuilder(String str)
    

no-args构造函数创建一个默认容量为16的空StringBuilder。

第二个构造函数使用CharSequence对象作为参数。

它创建一个StringBuilder对象,其内容与指定的CharSequence相同。

第三个构造函数使用int作为参数;它创建一个空的StringBuilder对象,其初始容量与指定的参数相同。

以下是创建StringBuilder对象的一些示例:

    StringBuilder sb1  = new StringBuilder();
    StringBuilder sb2  = new StringBuilder("Here is  the   content");
    StringBuilder sb3  = new StringBuilder(200);
    

append()方法将文本添加到StringBuilder的结尾。它需要许多类型的参数。

insert()和delete()修改其内容。

长度和容量

StringBuilder类有两个属性:length和capacity。

它的长度是指其内容的长度,而其容量是指它可以容纳而不分配新的内存的最大字符数。

length()和capacity()方法分别返回其长度和容量。例如,

    public class Main {
      public static void main(String[] args) {
        StringBuilder sb = new StringBuilder(200); // Capacity:200, length:0
        sb.append("Hello"); // Capacity:200, length:5
        int len = sb.length(); // len is assigned 5
        int capacity = sb.capacity(); // capacity is assigned 200
    
      }
    }
    

转换为字符串

我们可以通过使用其toString()方法将StringBuilder的内容作为String。

    public class Main {
      public static void main(String[] args) {
        // Create a String object
        String s1 = new String("Hello");
    
        // Create a StringBuilder from of the String object s1
        StringBuilder sb = new StringBuilder(s1);
    
        // Append " Java" to the StringBuilder"s content
        sb.append(" Java"); // Now, sb contains "Hello Java"
    
        // Get a String from the StringBuilder
        String s2 = sb.toString(); // s2 contains "Hello Java"
    
      }
    }
    

StringBuilder有一个setLength()方法,它的新长度作为参数。如果新长度大于旧长度,则额外位置用空字符填充(空字符为\ u0000)。

如果新长度小于旧长度,则其内容将被截断以适应新长度。

    public class Main {
      public static void main(String[] args) {
        // Length is 5
        StringBuilder sb = new StringBuilder("Hello");
    
        // Now the length is 7 with last two characters as null character "\u0000"
        sb.setLength(7);
    
        // Now the length is 2 and the content is "He"
        sb.setLength(2);
    
      }
    }
    

例子

StringBuilder类有一个reverse()方法,它用相同的字符序列替换其内容,但顺序相反。

以下代码显示了StringBuilder类的一些方法的使用。

    public class Main {
      public static void main(String[] args) {
        // Create an empty StringBuffer
        StringBuilder sb = new StringBuilder();
        printDetails(sb);
    
        // Append "good"
        sb.append("good");
        printDetails(sb);
    
        // Insert "Hi " in the beginning
        sb.insert(0, "Hi ");
        printDetails(sb);
    
        // Delete the first o
        sb.deleteCharAt(1);
        printDetails(sb);
    
        // Append "  be  with  you"
        sb.append(" be  with  you");
        printDetails(sb);
    
        // Set the length to 3
        sb.setLength(3);
        printDetails(sb);
    
        // Reverse the content
        sb.reverse();
        printDetails(sb);
      }
    
      public static void printDetails(StringBuilder sb) {
        System.out.println("Content: \"" + sb + "\"");
        System.out.println("Length: " + sb.length());
        System.out.println("Capacity: " + sb.capacity());
    
        // Print an empty line to separate results
        System.out.println();
      }
    }
    

上面的代码生成以下结果。

2021041811115_1.png

字符串连接运算符(+)

我们经常使用+运算符将字符串,原始类型值或对象连接到另一个字符串。

例如,

    String str = "X" + "Y" + 12.56;
    

为了优化字符串连接操作,编译器用一个使用StringBuilder的语句替换字符串连接。

    String str = new StringBuilder().append("X").append("Y").append(12.56).toString();
    
点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java StringBuilder/StringBuffer
上一篇
Java 字符串算法
下一篇
Java 数组元素