java中stringBuilder的用法详解

String对象是不可改变的。每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。

  通过用一个重载的构造函数方法初始化变量,可以创建StringBuilder类的新实例,正如以下示例中所阐释的那样。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

(一)设置容量和长度

  虽然StringBuilder对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,不应将它与当前StringBuilder对象容纳的字符串长度混淆在一起。例如,可以创建StringBuilder类的带有字符串“Hello”(长度为5)的一个新实例,同时可以指定该对象的最大容量为25。当修改StringBuilder时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定StringBuilder类的容量。以下代码示例指定可以将MyStringBuilder对象扩充到最大25个空白。
StringBuilderMyStringBuilder = new StringBuilder("Hello World!", 25);
另外,可以使用读/写Capacity属性来设置对象的最大长度。以下代码示例使用Capacity属性来定义对象的最大长度。
MyStringBuilder.Capacity= 25;

(二)下面列出了此类的几个常用方法:

(1)Append方法可用来将文本或对象的字符串表示形式添加到由当前StringBuilder对象表示的字符串的结尾处。以下示例将一个StringBuilder对象初始化为“Hello World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。

StringBuilderMyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(MyStringBuilder);

此示例将Hello World! What abeautiful day.显示到控制台。

(2)AppendFormat方法将文本添加到StringBuilder的结尾处,而且实现了IFormattable接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到StringBuilder的后面。以下示例使用AppendFormat方法将一个设置为货币值格式的整数值放置到StringBuilder的结尾。

int MyInt= 25;
StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(MyStringBuilder);

此示例将Your total is $25.00显示到控制台。

(3)Insert方法将字符串或对象添加到当前StringBuilder中的指定位置。以下示例使用此方法将一个单词插入到StringBuilder的第六个位置。

StringBuilderMyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);

此示例将Hello BeautifulWorld!显示到控制台。

(4)可以使用 delete方法从当前StringBuilder中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用Remove方法缩短StringBuilder。

StringBuilderMyStringBuilder = new StringBuilder("helloooo");
MyStringBuilder.delete(5,7);
Console.WriteLine(MyStringBuilder);

此示例将 helloo显示到控制台。

(5)使用Replace方法,可以用另一个指定的字符来替换StringBuilder对象内的字符。以下示例使用Replace方法来搜索

StringBuilder对象,查找所有的感叹号字符(!),并用问号字符(?)来替换它们。
StringBuilderMyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);

此示例将Hello World?显示到控制台

getSqlMapClientTemplate().queryForList((new StringBuilder()).append(entityClass.getName()).append(".select").toString(), null);

Java的StringBuilder类

如果程序对附加字符串的需求很频繁,不建议使用+来进行字符串的串联。可以考虑使用java.lang.StringBuilder 类,使用这个类所产生的对象默认会有16个字符的长度,您也可以自行指定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder 对象会自动增加长度以容纳被附加的字符。如果有频繁作字符串附加的需求,使用StringBuilder 类能使效率大大提高。如下代码: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 sb = new StringBuilder ( "" );
beginTime = System.currentTimeMillis();
for ( int i= 0 ;i< 10000 ;i++)
sb.append(String.valueOf(i));
endTime = System.currentTimeMillis();
System.out.println("执行时间:" +(endTime-beginTime));

}
}
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 sb = new StringBuilder ("中国");
      beginTime = System.currentTimeMillis();
      for(int i=0;i<1;i++)
      sb.append("\"台湾\"");
      endTime = System.currentTimeMillis();
      System.out.println("执行时间:"+(endTime-beginTime));

}
}

此段代码输出:中国“台湾”

执行时间:3188
执行时间:15

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

到此这篇关于java中stringBuilder的用法详解的文章就介绍到这了,更多相关java stringBuilder 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2020-07-22

java StringBuilder类的详解及简单实例

 java  StringBuilder类的详解及简单实例 实现代码: public class StringBuilderTest { /** * @param args */ public static void main(String[] args) { StringBuilder sb = new StringBuilder(); // 追加字符串 sb.append("java");//sb = "java" // 插入 sb.insert(0 , &qu

Java StringBuilder类相关知识总结

1.构造方法: 无参构造:new StringBuilder() -- 得到的是 "" 一个空字符串 有参构造:new StringBuilder("abc"); 2.成员方法: append()方法:在字符串的末尾添加内容,返回值仍然是this,故可以链式调用. public class Demo5 { public static void main(String[] args) { StringBuilder sb=new StringBuilder("

Java 中String StringBuilder 与 StringBuffer详解及用法实例

在Android/Java开发中,用来处理字符串常用的类有3种: String.StringBuilder.StringBuffer. 它们的异同点: 1) 都是 final 类, 都不允许被继承; 2) String 长度是不可变的, StringBuffer.StringBuilder 长度是可变的; 3) StringBuffer 是线程安全的, StringBuilder 不是线程安全的. String VS StringBuffer String 类型和StringBuffer的主要性

浅谈java中String StringBuffer StringBuilder的区别

* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等 * 但StringBuffer和StringBuilder有什么区别呢? StringBuffer是线程安全的,在多线程程序中是很方便使用的,但是程序的效率就会慢一点. StringBuilder不是线程安全的,在单线程中,比StringBuf

Java 中 String,StringBuffer 和 StringBuilder 的区别及用法

1 简介 在 Java 语言中,共有 8 个基本的数据类型,分别为:byte.short.int.long.float.double.boolean 和 char,其中 char 类型用于表示单个字符,例如 a.b.c .A.B.C.& 这些大小写字母或者特殊字符等等.在实际的编程中,单个的字符并没有我们想象中用的那么频繁,反而是多个字符组成的"字符串"更为常见,但是在基本的数据类型中,并没有字符串这种数据类型.为了解决这个问题,Java 语言为我们提供了一个被 final 关

Java StringBuilder类原理及常用方法

这篇文章主要介绍了Java StringBuilder类原理及常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 StringBuilder类的由来 由于String类的对象内容不可改变(底层是一个被final修饰的数组),所以每当我们进行字符串拼接时,总是会在内存中创建一个新的对象.如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间.为了解决这一问题,我们可以使用java.lang.StringBui

java String、StringBuilder和StringBuffer的区别详解

1.共同点: 三者都是字符串类.StringBuilder和StringBuffer都是继承AbstractStringBuilder类,存储字符串都是使用数组进行存储的. 2.区别: a. String 类存储字符串使用的数组被final进行修饰了,当对String对象进行增加修改字符时,都需要重新new一个字符数组,将原来的值拷贝到新的字符数组中,所以当字符串的值需要经常修改的时候就需要考虑用StringBuilder或StringBuffer来进行处理了. public final cla

Java stringBuilder的使用方法及实例解析

String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能. 通过用一个重载的构造函数方法初始化变量,可以创建 Strin

Java中String、StringBuffer、StringBuilder的区别详解

java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的. private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在A

基于Java中throw和throws的区别(详解)

系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常. throw是语句抛出一个异常. 语法:throw (异常对象); throw e; throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常) 语法:[(修饰符)](返回

Java中堆和栈的区别详解

当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,Java中存在栈这样一个后进先出(Last In First Out)的顺序的数据结构,这就是java.util.Stack.这种情况下,不免让很多人更加费解前面的问题.事实上,堆和栈都是内存中的一部分,有着不同的作用,而且一个程序需要在这片区域上分配内存.众所周知,所有的Java程序都运行在JVM虚拟机内部,我们这里介绍的自然

java中String与StringBuilder的区别

相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE 5.0 里面带来的一个新的字符操作的类-- StringBuilder (先别忙着扔我砖头,我还算清醒,我这里说的不是 C #, Java 也有 StringBuilder 类).那么这个 StringBuilder 和 StringBuffer 以及我们最早遇见的 String 类有那些区别呢?

java中SynchronizedList和Vector的区别详解

前言 Vector是java.util包中的一个类. SynchronizedList是java.util.Collections中的一个静态内部类. 在多线程的场景中可以直接使用Vector类,也可以使用Collections.synchronizedList(List list)方法来返回一个线程安全的List. 那么,到底SynchronizedList和Vector有没有区别,为什么java api要提供这两种线程安全的List的实现方式呢? 首先,我们知道Vector和Arraylis

Java中Vector与ArrayList的区别详解

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体实现类的相关区别如下:1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组

java线程中start和run的区别详解

这篇文章主要介绍了java线程中start和run的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 public class Test1 extends Thread { @Override public void run() { while (true) { System.out.println(Thread.currentThread().getName()); } } public static void main(String[

Java中==符号与equals()的使用详解(测试两个变量是否相等)

Java 程序中测试两个变量是否相等有两种方式:一种是利用 == 运算符,另一种是利用equals()方法. 当使用 == 来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就返回true. 但是对于两个引用类型变量,只有它们指向同一个对象时, == 判断才会返回true. == 不可用于比较类型上没有父子关系的两个对象. 很多书上说equals()方法是判断两个对象的值相等.这种说法不准确.实际上equals()方法是O

基于python中staticmethod和classmethod的区别(详解)

例子 class A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): print "executing class_foo(%s,%s)"%(cls,x) @staticmethod def static_foo(x): print "executing static_foo(%s)"%x a=A(