StringBuilder / StringBuffer类
StringBuilder类 和 StringBuffer 类的由来?
在Java中使用String 类可以描述所有的字符串数据,但是String类的对象一旦创建,则该对象的字符序列 就不可更改,当需要更改字符串内容时,需要拷贝出来多个副本单独进行保存,因此对空间 和 时间 的消耗会比较大。
而StringBuilder类 和 StringBuffer 类 ,这两个类描述的字符序列可以直接更改。可以使用StringBuilder类 和 StringBuffer 类,来解决这样的问题。
StringBuilder类 和 StringBuffer 类的比较?
StringBuffer类是早期存在的类, 支持线程同步/安全, 因此效率比较低;
StringBuilder类是后来增加的类,不支持线程同步/安全,因此效率比较高;
一、StringBuilder类
1. 概述
java.lang.String 类由 final 修饰,表示该类不能被继承。
该类用于描述 可变的字符序列 , 不支持线程的同步 / 安全,因此效率比较高。
2. 常用方法
2.1构造方法:
StringBuilder() -使用无参的形式进行对象的构造,初始容量是16个字符。
StringBuilder(String str) -容量为16 + 字符串的长度
StringBuilder(int capacity) - 根据参数指定的容量来构造该类的对象
2.2普通方法:
int capacity( ) -返回调用对象的容量
int length( ) -返回调用对象中字符的个数
StringBuilder insert( int offset, String str ) -用于将str 插入 到当前调用对象中 下标为offset的索引位置上,
StringBuilder append( String str ) -用于将str指向的字符串内容 追加 到当前字符串的末尾。
StringBuilder delete( int start, int end ) -用于 删除 字符串中 [start, end) 区间的子字符串内容
StringBuilder replace (int start, int end, String str ) -用于将当前字符串中 下标为[start, end) 区间的字符串内容 替换 成str
StringBuilder reverse( ) -用于 反转字符序列
当插入的数据内容 没有超过 容量大小时,则容量不变;
当插入的数据内容 超 过 容量大小时,则容量变大;
代码:
package com.monkey1038;
public class StringBuilderTest {
public static void main(String[] args) {
// 使用参数指定的字符串内容来构造对象,容量应该为 字符串长度 +16
StringBuilder sb1 = new StringBuilder("hello");
// 打印字符串对象的容量
int cc = sb1.capacity();
System.out.println("\"hello\"的容量值 :"+cc); // 5+16=21 5:"hello"的长度
System.out.println();
// 打印字符串对象中字符的个数
int length = sb1.length();
System.out.println("\"hello\"的字符个数:"+length);
System.out.println();
// 思考:既然直接对字符串更改,为啥还要返回值呢?
// 返回值的目的是 为了能够进行多次连续调用
// sb1.insert(2, "12345").append("12345").delete(0, 1).reverse().toString().length();
// 向下标为2的位置,插入字符串“1234”
StringBuilder sb2 = sb1.insert(2, "1234");
System.out.println("向下标为2的位置,插入字符串“1234”: sb2= "+sb2);
System.out.println();
System.out.println("打印sb1= "+sb1);
System.out.println();
// 打印字符串对象的容量,当插入的数据没有超过容量时,则容量不变
// 当插入的数据内容超过容量范围时,容量变大
cc = sb1.capacity();
System.out.println("\"hello\"的容量:"+cc);
System.out.println();
// 打印字符串对象中字符的个数
System.out.println("\"hello\"字符个数: "+sb1.length());
System.out.println();
// 向字符串中下标为9的位置 插入"ABCD",插入到当前字符串的末尾
sb1.insert(9, "ABCD");
System.out.println("向字符串中下标为9的位置 插入\"ABCD\",插入到当前字符串的末尾: sb1= "+sb1);
System.out.println();
// 将字符串"world"追加到当前字符串的末尾
sb1.append("world");
System.out.println("将字符串\"world\"追加到当前字符串的末尾: sb1= "+sb1);
System.out.println();
// 将字符串中 "1234"删除掉
sb1.delete(2, 6); // [2,6)
System.out.println("将字符串中 \"1234\"删除掉: sb1= "+sb1);
System.out.println();
// 将字符串中"ABCD"替换成"abcd"
sb1.replace(5, 9, "abcd");
System.out.println("将字符串中\"ABCD\"替换成\"abcd\" sb1= "+sb1);
System.out.println();
// 实现字符串的反转
sb1.reverse();
System.out.println("实现字符串的反转: sb1= "+sb1);
}
}
结果
"hello"的容量值 :21 "hello"的字符个数:5 向下标为2的位置,插入字符串“1234”: sb2= he1234llo 打印sb1= he1234llo "hello"的容量:21 "hello"字符个数: 9 向字符串中下标为9的位置 插入"ABCD",插入到当前字符串的末尾: sb1= he1234lloABCD 将字符串"world"追加到当前字符串的末尾: sb1= he1234lloABCDworld 将字符串中 "1234"删除掉: sb1= helloABCDworld 将字符串中"ABCD"替换成"abcd" sb1= helloabcdworld 实现字符串的反转: sb1= dlrowdcbaolleh
二、StringBuffer 类
思考: 既然直接对当前字符串更改即可,为何还需要有返回值?
返回值的目的是为了能够进行多次连续的调用。
StringBuilder / StringBuffer类的更多相关文章
- Java_String&StringBuilder&StringBuffer类
目录 一.String类 二."==" 和 "equals"的区别 三.StringBuffer和StringBuilder 一.String类 String为 ...
- String、StringBuffer和StringBuilder,定义一个自己的StringBuilder的类
String Java中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但Java一般使用String类作为字符串的标准格式,Java编译器把字符串值作为String对象; St ...
- StringBuffer类 和 StringBuilder类
上一篇中讲解了String类的用法.那么String有什么特点呢? 字符串特点:字符串是常量,其值在创建后就不能被修改.字符串的内容一旦发生变化,就会创建一个新的对象. 代码验证字符串特点: publ ...
- Java基础——数组应用之StringBuilder类和StringBuffer类
接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...
- java中String类、StringBuilder类和StringBuffer类详解
本位转载自http://www.cnblogs.com/dolphin0520/p/3778589.html 版权声明如下: 作者:海子 出处:http://www.cnblogs.com/dolp ...
- String、StringBuilder和StringBuffer类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java学习笔记20(String类应用、StringBuffer类、StringBuilder类)
1.获取指定字符串中大小写和数字的个数: package demo; public class StringTest { public static void main(String[] args) ...
- 解析Java中的String、StringBuilder、StringBuffer类(一)
引言 String 类及其相关的StringBuilder.StringBuffer 类在 Java 中的使用相当的多,在各个公司的面试中也是必不可少的.因此,在本周,我打算花费一些时间来认真的研读一 ...
- 13-01 java StringBuffer类,StringBuilder类
StringBuffer类的构造方法 package cn.itcast_01; /* * 线程安全(多线程讲解) * 安全 -- 同步 -- 数据是安全的 * 不安全 -- 不同步 -- 效率高一些 ...
随机推荐
- HttpException (0x80004005): 无法连接到 SQL Server 会话数据库
ASP.NET 项目运行时出现错误提示:[HttpException (0x80004005): 无法连接到 SQL Server 会话数据库.] ,后排查问题发现是由于项目的Session模式是使用 ...
- Ubuntu 16.04下apt安装ssh及卸载(含FileZilla 使用过程)
前言:文件发布测试过程中需要使用Windows和Ubuntu实现文件共享. 以下内容转载自:http://blog.csdn.net/jiang13479/article/details/535014 ...
- vue 实现邮戳边缘
效果: vue: <template> <div class="couponItem"> <div class="itemLeft" ...
- 廖雪峰Java10加密与安全-4加密算法-4密钥交换算法
1DH算法 1.1.原根公式:g^i mod P 条件:1<g<P,0<i<P 原根:介于[1, p-1]之间的任意2个数i,j(p为素数,i≠j)的结果不相等,即 g^i m ...
- new运算符与malloc函数(还需要修改)
细说new与malloc的10点区别 C++ 自由存储区是否等价于堆? 浅谈new/delete和malloc/free的用法与区别 new和malloc都是在对上开辟内存,但尽量使用new. 使用m ...
- Django项目:CMDB(服务器硬件资产自动采集系统)--05--05CMDB采集硬件数据的插件
#__init__.py # ————————05CMDB采集硬件数据的插件———————— from config import settings import importlib # —————— ...
- 关于MySQL IN LIKE OR使用索引的问题
以前在网上看了一些资料,有些人说话不严谨,导致一直被误导,最近在实际开发中发现一些结论有问题,因此特地整理了一下,防止下次继续犯错. 以下前提是有对这个字段建立索引(简直废话,没建的肯定不会使用索引啊 ...
- 软件-MQ-RabbitMQ:RabbitMQ
ylbtech-软件-MQ-RabbitMQ:RabbitMQ RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语 ...
- 转:linux进程间通信的几种机制的比较及适用场合
源地址:http://blog.csdn.net/f_x_p0324/article/details/6878081 socket 1. # 管道( pipe ):管道是一种半双工的通信方式,数据只能 ...
- python学习笔记1_import与from方法总结
一.模块&包简介 模块:所谓模块就是一个.py文件,用来存放变量,方法的文件,便于在其他python文件中导入(通过import或from). 包(package): 包是更大的组织单位,用来 ...