资讯专栏INFORMATION COLUMN

Java™ 教程(StringBuilder类)

daryl / 1336人阅读

StringBuilder类

StringBuilder对象与String对象类似,只是它可以被修改,在内部,这些对象被视为包含一系列字符的可变长度数组,在任何时候,可以通过方法调用来改变序列的长度和内容。

除非字符串构建器在更简单的代码(参见本节末尾的示例程序)或更好的性能方面提供优势,否则应始终使用字符串,例如,如果需要连接大量字符串,则附加到StringBuilder对象会更有效。

长度和容量

String类一样,StringBuilder类有一个length()方法,该方法返回构建器中字符序列的长度。

与字符串不同,每个字符串构建器还具有容量,即已分配的字符空间数,capacity()方法返回的容量始终大于或等于长度(通常大于),并将根据需要自动扩展以适应字符串构建器的添加。

StringBuilder构造函数:

构造函数 描述
StringBuilder() 创建一个容量为16的空字符串构建器(16个空元素)。
StringBuilder(CharSequence cs) 构造一个字符串构建器,其中包含与指定CharSequence相同的字符,以及尾随CharSequence的额外16个空元素。
StringBuilder(int initCapacity) 创建具有指定初始容量的空字符串构建器。
StringBuilder(String s) 创建一个字符串构建器,其值由指定的字符串初始化,另外还有16个空元素尾随该字符串。

例如,以下代码:

// creates empty builder, capacity 16
StringBuilder sb = new StringBuilder();
// adds 9 character string at beginning
sb.append("Greetings");

将生成一个长度为9且容量为16的字符串构建器:

StringBuilder类有一些与String类没有的长度和容量相关的方法:

方法 描述
void setLength(int newLength) 设置字符序列的长度;
如果newLength小于length(),则截断字符序列中的剩余字符;
如果newLength大于length(),则在字符序列的末尾添加null字符。
void ensureCapacity(int minCapacity) 确保容量至少等于指定的最小值。

许多操作(例如,append()insert()setLength())可以增加字符串构建器中字符序列的长度,从而使结果length()大于capacity(),发生这种情况时,容量会自动增加。

StringBuilder操作

String中不可用的StringBuilder上的主要操作是append()insert()方法,它们被重载以接受任何类型的数据,每个都将其参数转换为字符串,然后将该字符串的字符追加或插入字符串构建器中的字符序列,append方法总是在现有字符序列的末尾添加这些字符,而insert方法在指定点添加字符。

以下是StringBuilder类的许多方法。

方法 描述
StringBuilder append(boolean b)
StringBuilder append(char c)
StringBuilder append(char[] str)
StringBuilder append(char[] str, int offset, int len)
StringBuilder append(double d)
StringBuilder append(float f)
StringBuilder append(int i)
StringBuilder append(long lng)
StringBuilder append(Object obj)
StringBuilder append(String s)
将参数追加到此字符串构建器,在附加操作发生之前,数据将转换为字符串。
StringBuilder delete(int start, int end)
StringBuilder deleteCharAt(int index)
第一个方法在StringBuilder的字符序列中删除从startend-1(包括)的子序列;
第二种方法删除位于索引处的字符。
StringBuilder insert(int offset, boolean b)
StringBuilder insert(int offset, char c)
StringBuilder insert(int offset, char[] str)
StringBuilder insert(int index, char[] str, int offset, int len)
StringBuilder insert(int offset, double d)
StringBuilder insert(int offset, float f)
StringBuilder insert(int offset, int i)
StringBuilder insert(int offset, long lng)
StringBuilder insert(int offset, Object obj)
StringBuilder insert(int offset, String s)
将第二个参数插入到字符串构建器中;
第一个整数参数表示要在其之前插入数据的索引;
在插入操作发生之前,数据将转换为字符串。
StringBuilder replace(int start, int end, String s)
void setCharAt(int index, char c)
替换此字符串构建器中的指定字符。
StringBuilder reverse() 反转此字符串构建器中的字符序列。
String toString() 返回包含构建器中的字符序列的字符串。
你可以在StringBuilder对象上使用任何String方法,首先使用StringBuilder类的toString()方法将字符串构建器转换为字符串,然后使用StringBuilder(String str)构造函数将字符串转换回字符串构建器。
一个例子

标题为“字符串”一节中列出的StringDemo程序是一个示例程序,如果使用StringBuilder而不是String,该程序将更有效。

StringDemo反转了一个回文,下面是它的清单:

public class StringDemo {
    public static void main(String[] args) {
        String palindrome = "Dot saw I was Tod";
        int len = palindrome.length();
        char[] tempCharArray = new char[len];
        char[] charArray = new char[len];
        
        // put original string in an 
        // array of chars
        for (int i = 0; i < len; i++) {
            tempCharArray[i] = 
                palindrome.charAt(i);
        } 
        
        // reverse array of chars
        for (int j = 0; j < len; j++) {
            charArray[j] =
                tempCharArray[len - 1 - j];
        }
        
        String reversePalindrome =
            new String(charArray);
        System.out.println(reversePalindrome);
    }
}

运行该程序会产生以下输出:

doT saw I was toD

为了完成字符串反转,程序将字符串转换为字符数组(第一个for循环),将数组反转为第二个数组(第二个for循环),然后转换回字符串。

如果将palindrome字符串转换为字符串构建器,则可以在StringBuilder类中使用reverse()方法,它使代码更简单,更易于阅读:

public class StringBuilderDemo {
    public static void main(String[] args) {
        String palindrome = "Dot saw I was Tod";
         
        StringBuilder sb = new StringBuilder(palindrome);
        
        sb.reverse();  // reverse it
        
        System.out.println(sb);
    }
}

运行此程序会产生相同的输出:

doT saw I was toD

请注意,println()打印字符串构建器,如下所示:

System.out.println(sb);

因为sb.toString()是隐式调用的,因为它与println()调用中的任何其他对象一样。

还有一个StringBuffer类与StringBuilder类完全相同,但它是线程安全的,因为它的方法是同步的,线程将在关于并发的课程中讨论。
上一篇:比较字符串和字符串的部分 下一篇:自动装箱和拆箱

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72907.html

相关文章

  • Java学习笔记3-Number,String,StringBuilder

    摘要:创建字符串教程字符串长度用于获取有关对象的信息的方法称为访问器方法。类在中被提出,它和之间的最大不同在于的方法不是线程安全的不能同步访问。然而在应用程序要求线程安全的情况下,则必须使用类。 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,...

    pkhope 评论0 收藏0
  • Java教程(字符串)

    字符串 在Java编程中广泛使用的字符串是一系列字符,在Java编程语言中,字符串是对象。 Java平台提供String类来创建和操作字符串。 创建字符串 创建字符串的最直接方法是编写: String greeting = Hello world!; 在这种情况下,Hello world!是一个字符串文字 — 代码中的一系列字符,用双引号括起来,每当它在代码中遇到字符串文字时,编译器就会创建一个带...

    ThreeWords 评论0 收藏0
  • 【译】怎样在java中定义一个抽象属性

    摘要:我们的引擎使用预定义的分隔符来连接日志中的信息,并存储在一个中。在抽象类中定义带参数的构造函数在抽象类中定义动态属性的第一种方法是定义一个参数的构造函数。 翻译:疯狂的技术宅原文:http://programmergate.com/def...本文首发微信公众号:充实的脑洞 Abstract关键字通常被用于类和方法,用来把某些行为的实现委托给子类。由于Java不支持抽象属性,如果你试图...

    aervon 评论0 收藏0
  • Java NIO 之 Channel(通道)

    摘要:通道可以异步读写。使用的方法读取数据创建一个读数据缓冲区对象从通道中读取数据使用的方法写入数据创建一个写数据缓冲区对象写入数据关闭完成使用后,您必须关闭它。五提供了一种被称为的新功能,也称为本地矢量。功能是通道提供的并不是。 历史回顾: Java NIO 概览 Java NIO 之 Buffer(缓冲区) 其他高赞文章: 面试中关于Redis的问题看这篇就够了 一文轻松搞懂redis集...

    piglei 评论0 收藏0
  • SpringBoot整合MybatisPlus的简单教程(简单整合)

    摘要:最近在研究,顺便就会看看数据库连接这一块的知识,所以当我发现有通用和这两款网络上比较火的简化开发的优秀软件之后。先创建一个的项目,可以参考我之前的文章的简单教程一项目的创建。打开文件,将最新的相关的包都引用进来。 最近在研究springboot,顺便就会看看数据库连接这一块的知识 ,所以当我发现有通用Mapper和MybatisPlus这两款网络上比较火的简化mybatis开发的优秀软...

    duan199226 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<