Logo

郎哥编程

字符串生成器

2019-12-10 1020

在Java语言中,String对象被创建成功后,它的长度和内容都不能再改变。对String对象使用赋值和连接运算符改变内容时,都会在内存中产生一个新的String对象。如果对String对象多次进行连接或赋值操作,会导致程序占用较多内存,系统开销增大,这种情况是要尽量避免的。

Java API库提供了StringBuilder类,来解决字符串多次修改的问题。StringBuilder类允许程序频繁修改字符串内容,而不会在内存中创建新的字符串对象。StringBuilder类修改字符串内容的主要操作方法如下:

(1)append()方法

append()方法用于添加内容到字符串生成器,它是重载方法,它可以添加不同数据类型的内容到字符串生成器,如String、CharSequence、char、double、int、float等类型。

调用语法如下:

builder. append(content)

其中,builder是已创建的StringBuilder对象。content是指要添加的内容,它可以是任何类型的数据或类对象。

(2)insert()方法

insert()方法用于向字符串生成器的指定位置插入内容,它也是重载方法,它可以插入不同数据类型的内容到字符串生成器。

调用语法如下:

builder. insert(int offset, content)

其中,builder是已创建的StringBuilder对象。offset是字符串生成器的索引位置,在该索引位置插入content。content可以是任何类型的数据或类对象。

(3)delete(int statr int end)方法

delete()方法用于从字符串生成器中删除指定索引范围内的子串。该子串从指定的start开始,一直到索引end-1处的字符,如果end索引不存在,则到字符串生成器的尾部。如果start和end相等,该方法不做任何操作。

案例1:创建StringBuilder对象和String对象,在循环结构中使用StringBuilder对象的append()方法添加字符串,使用“+=”运算符为String对象添加字符串,验证String类和StringBuilder类添加字符串的效率。

在PbaseUnit11项目unit包下创建StringBuilderSample类。代码如下:

/** 
* @Title: StringBuilderSample.java 
* @Package unit 
* @Description: Java基础知识课程案例  
* @author 编程训练营 
* @date 
* @version V1.0 
*/ 
 
package unit;
 
/** 
* @ClassName: StringBuilderSample 
* @Description: 字符串(字符串生成器)案例1  
* @author 编程训练营 
* @date 
* 
*/
 
public class StringBuilderSample {
 
    /** 
    * @Title: main 
    * @Description:Java程序入口main方法 
    * @param @param args    参数 
   
    * @return void    返回类型 
    * @throws 
    */
 
    public static void main(String[] args) {
       // 创建String对象
       String  szTemp = "";
       // 创建StringBuilder对象
       StringBuilder builder = new StringBuilder();
       //获取操作前时间(毫秒数)
       long startTime = System.currentTimeMillis();
       // 循环10000次,循环追加字符串
       for( int i = 0 ; i < 100000; i++ )
       {
           szTemp += i;
       }
       //获取操作后时间(毫秒数)
       long endTime = System.currentTimeMillis();
       // 计算szTemp追加字符串操作时间
       long  nTime = endTime - startTime;
       System.out.println("String消耗时间:"+ nTime);
      
       //获取操作前时间(毫秒数)
       startTime = System.currentTimeMillis();
       // 循环10000次,循环追加字符串
       for( int i = 0 ; i < 100000; i++ )
       {
           builder.append(i);
       }
       //获取操作后时间(毫秒数)
       endTime = System.currentTimeMillis();
       // 计算builder追加字符串操作时间
       nTime = endTime - startTime;
       System.out.println("StringBuilder消耗时间:"+ nTime);
      
    }
 
}

程序结构分析

程序分别创建了String对象和StringBuilder对象。程序设置两轮循环,循环次数为100000次,在每轮循环开始前,调用System.currentTimeMillis()方法获取循环前时间,循环结束后获取循环后时间,用于计算循环耗费的时间并输出。在第一轮循环体内,szTemp对象使用“+=”运算符追加循环变量i的值;在在第二轮循环体内builder对象调用append()方法追加循环变量i的值。

程序执行结果如下图所示:

image.png                                            

从执行结果可以看出,StringBuilder类和String类操作字符串的效率差别很大,当在程序中频繁使用附加字符串时,建议使用StringBuilder类,当附加字符串操作结束后,可以使用StringBuilder类的toString()方法返回一个String对象。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论