`

StringBuilder

阅读更多

转载:

 StringBuilder

一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符至String对象中。您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String实例。如果程序对这种附加字符串的需求很频繁,并不建议使用+来进行字符串的串联。在面向对象程序设计中,最好是能重复运用已生成的对象,对象的生成需要内存空间与时间,不断地产生String实例是一个没有效率的行为。

J2SE 5.0提供java.lang.StringBuilder类,使用这个类所产生的对象默认会有16个字符的长度,您也可以自行指定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁作字符串附加的需求,使用StringBuilder会让程序的效率大大提高。通过下面的简单测试程序就可以知道效能差距有多大。

Ü 范例6.5  AppendStringTest.java                                                     

public class AppendStringTest {

    public static void main(String[] args) {

        String text = "";

 

        long beginTime = System.currentTimeMillis();

        for(int i = 0; i < 10000; i++)

            text = text + i;

        long endTime = System.currentTimeMillis();

        System.out.println("执行时间:" + (endTime - beginTime));

 

        StringBuilder builder = new StringBuilder("");

        beginTime = System.currentTimeMillis();

        for(int i = 0; i < 10000; i++)

            builder.append(String.valueOf(i));

        endTime = System.currentTimeMillis();

        System.out.println("执行时间:" + (endTime - beginTime));

    }

}

 

在范例6.5中首先使用+来串联字符串,使用System.currentTimeMillis()取得for循环执行前、后的系统时间,这样就可以得知for循环执行了多久。以下是我的计算机上的测试数据:

 

执行时间:4641

执行时间:16

可以看到执行的时间差距很大,这说明了使用+串联字符串所带来的负担。如果有经常作附加字符串的需求,建议使用StringBuilder。事实上就范例6.5来说,第二个for循环执行时间还可以更短,因为append()也可以接受基本数据类型,所以不必特地使用String.valueOf()方法从int取得String。改为以下的方式,执行时间可以大幅缩短:

for(int i = 0; i < 10000; i++)
    builder.append(i);

使用StringBuilder最后若要输出字符串结果,可以用toString()方法。可以使用length()方法得知目前对象中的字符长度,而capacity()可返回该对象目前可容纳的字符容量。另外,StringBuilder还有像insert()方法可以将字符插入指定的位置,如果该位置以后有字符,则将所有的字符往后移;deleteChar()方法可以删除指定位置的字符,而reserve()方法可以反转字符串。详细的使用可以查询java.lang.StringBuilderAPI文件说明。

StringBuilderJ2SE 5.0才新增的类,在J2SE 5.0之前的版本若有相同的需求,则使用java.lang.StringBuffer。事实上,StringBuilder被设计为与StringBuffer具有相同的操作接口。在单机非多线程(Multithread)的情况下使用StringBuilder会有较好的效率,因为StringBuilder没有处理同步(Synchronized)问题。StringBuffer则会处理同步问题,如果StringBuilder会在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题

分享到:
评论

相关推荐

    C#中StringBuilder类的使用方法

    C#中StringBuilder类的使用方法 C#中的StringBuilder类是 System.Text 命名空间下的一个类,用于高效地处理和操作字符串。StringBuilder类的出现是为了解决String类的不可变性问题,每次使用String类中的方法时,都...

    String、StringBuilder和StringBuffer的区别

    在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...

    StringBuilder的用法

    StringBuilder 的用法 StringBuilder 是一个高效的字符串处理类,用于处理需要频繁修改的字符串。在 .NET Framework 中,String 对象是不可改变的,每次使用 System.String 类中的方法之一时,都要在内存中创建一个...

    String StringBuffer和StringBuilder区别之源码解析

    "String StringBuffer和StringBuilder区别之源码解析" 在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、...

    C#源代码-使用StringBuilder来拼接HTML中的Table表格.zip

    1. **初始化StringBuilder对象**:首先,我们需要创建一个StringBuilder实例,指定初始容量以减少后续的容量调整。 ```csharp StringBuilder htmlBuilder = new StringBuilder(capacity); ``` 2. **添加HTML头部**...

    stringBuilder完整版.pdf

    如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能。 通过用一个重载的构造函数方法初始化变量,可以...

    String、StringBuffer、StringBuilder的使用方法

    在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...

    PrintStream,StringBuilder,Formatter

    在Java编程语言中,`PrintStream`, `StringBuilder` 和 `Formatter` 是三个非常重要的类,分别用于不同的输出处理。理解并熟练使用这三个类是提升Java编程能力的关键。 首先,我们来详细了解一下`PrintStream`。它...

    String和StringBuilder类的区别

    ### String和StringBuilder类的区别 在.NET框架中,`String` 和 `StringBuilder` 是两种非常重要的字符串处理类。尽管它们都能用来表示和操作文本数据,但它们之间存在显著的区别,主要体现在内存使用、性能表现...

    StringBuilder字符串生成工具

    主要生成StringBuilder 字符串 类似 StringBuilder builder = new StringBuilder(); builder.AppendFormat("&lt;span class=\"navSep\"&gt;&lt;/span&gt;\r\n"); builder.AppendFormat("机构看盘&lt;/a&gt;\r\n"); builder....

    String ,StringBuffer与StringBuilder

    String, StringBuffer 与 StringBuilder 的区别 在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String ...

    java中stringBuilder的用法.pdf

    在Java编程语言中,StringBuilder是一个可变的字符序列。与String相比,StringBuilder的主要优势在于它在频繁修改字符串时的性能优势。当使用String拼接时,每次拼接都会创建一个新的String对象,而StringBuilder则...

    字符串、String类和StringBuilder类

    本文将深入探讨字符串、String类以及StringBuilder类,帮助你更好地理解和应用这些基础知识。 首先,我们关注的是String类。在C#中,String类是不可变的,这意味着一旦一个字符串对象被创建,它的内容就不能被改变...

    StringBuilder字符串拼接工具

    在Java编程语言中,`StringBuilder`是一个非常重要的类,它被广泛用于字符串的构建和拼接操作。在处理大量字符串连接时,相比直接使用`+`运算符或`String`对象,`StringBuilder`能提供更高的性能。这是因为每次使用`...

    sql语句转 StringBuilder buffer

    `StringBuilder` 和 `StringBuffer` 是两个非常重要的类,它们用于构建和操作字符串。本篇将深入探讨如何将SQL语句转换为`StringBuilder`对象,以及`StringBuffer`的相关知识点。 `StringBuilder` 和 `StringBuffer...

    ajax string StringBuilder理论和示例

    StringBuilder类在.NET框架中扮演着重要的角色,特别是在大量字符串操作时提高性能。以下是对这些概念的详细解释: **Ajax(异步JavaScript和XML)** Ajax的核心在于能够在不刷新整个页面的情况下与服务器交换数据...

    C++实现StringBuilder的例子

    在编程领域,`StringBuilder`是许多面向对象语言中用于高效构建和操作字符串的类,它允许在内存中多次修改字符串而无需每次都创建新的字符串对象。Java中的`StringBuilder`就是一个典型的例子,但在C++中,由于语言...

    C#文章加空格源码 StringBuilder类

    在C#编程中,`StringBuilder`类是一个非常重要的工具,特别是在处理大量文本操作时,它提供了比使用字符串连接更高效的方式。本篇文章将深入探讨如何使用`StringBuilder`类来实现"有选中部分给选中部分加空格"以及...

Global site tag (gtag.js) - Google Analytics