3、StringBuffer类
StringBuffer类
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
很多方法与String相同,但StringBuffer是可变长度的 StringBuffer是一个容器
StringBuffer 的直接父类是 AbstractStringBuilder
StringBuffer 实现了 Serializable,即StringBuffer的对象可以串行化
在父类 AbstractStringBuilder 有属性 char[] value ,不是final
该 value 数组存放 字符串内容,因此存放在堆中的StringBuffer 是一个 final 类,不能被继承
因为StringBuffer 字符内容是存在 char[] value,所以再变化(增加/删除)时,不用每次
都更换地址(即不是每次创建对象),所以效率高于 String
String VS StringBuffer
String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,
效率极低 //private final char value[];
StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以
更新内容,不用每次更新地址,效率极高 //char[] value; //这个放在堆
StringBuffer的构造器
StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符
StringBuffer(CharSequence seq) public java.long.StringBuilder(CharSequence seq) 构造一个
字符串缓冲区,它包含与其指定的CharSequence 相同的字符。 (不常用)
StringBuffer(int capacity) //capacity[容量] 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
即对 char[] 大小进行指定
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容
//1. 创建一个大小为 16的 char[] ,用于存放字符内容
StringBuffer stringBuffer = new StringBuffer();
//2. 通过构造器指定 char[] 大小
StringBuffer sTringBuffer = new StringBuffer(100);
//3. 通过给一个String 创建 StringBuffer,char[] 大小就是 str.length() + 16
StringBuffer hello = new StringBuffer("hello");
String 和 StringBuffer 相互转换
// String -> StringBuffer
String str = "hello tom";
// 方式1
// 注意:返回的才是StringBuffer对象,对str 本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用的时append() 方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);
// StringBuffer -> String
StringBuffer stringBuffer3 = new StringBuffer("好好学习");
//方法1 使用StringBuffer提供的 toString方法
String s = stringBuffer3.toString();
//方式2:使用构造器来搞定
String s1 = new String(stringBuffer3);
StringBuffer类常用方法
StringBuffer s = new StringBuffer("hello");
//增
s.append(',');
s.append("张三丰");
s.append("赵敏").append(100).append(true).append(10.5);
System.out.println(s); //删
/*
删除索引为 >=start && <end 处的字符
删除 11-14的字符 [11,14)
*/
s.delete(11,14);
System.out.println(s); //改
//使用 周芷若 替换 索引9-11的字符 [9,11)
s.replace(9,11,"周芷若");
System.out.println(s); //查找
//查找指定的字符串在字符串中第一次出现的索引,如果找不到返回-1
int indexOf = s.indexOf("张三丰");
System.out.println(indexOf); //插
//在索引为9的位置插入 赵敏 ,原来索引为9的内容自动后移
s.insert(9,"赵敏");
System.out.println(s); //长度
System.out.println(s.length());
System.out.println(s);
练习
String price = "8123564.59";
StringBuffer sb = new StringBuffer(price);
//int i = sb.lastIndexOf(".");
//sb = sb.insert(i - 3,",");
for (int i = sb.lastIndexOf("."); i > 3; i -= 3) {
sb = sb.insert(i - 3,",");
}
System.out.println(sb);
//运行结果:8,123,564.59
3、StringBuffer类的更多相关文章
- StringBuffer类的功能
StringBuffer类 1.添加功能 public StringBuffer append(String str):可以把任意类型数据添加到缓冲区,并返回缓冲区域 public StringBuf ...
- String类和StringBuffer类的区别
首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...
- java之StringBuffer类详解
StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...
- Java api 入门教程 之 JAVA的StringBuffer类
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...
- StringBuffer类
String的内容一旦声明则不可改变,如果改变,则改变的肯定是String的引用地址. 如果一个字符串要被经常改变,则就必须使用StringBuffer类. 在String类中可以通过“+”进行字符串 ...
- String类和StringBuffer类的方法
一.String类的方法 public char charAt(int index) 返回字符串index个字符 public int length() 返回字符串长 ...
- android StringBuffer类的使用
参考 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html StringBuffer类和String一样,也用来代表字符串, ...
- 常用类库——StringBuffer类
掌握目标: 1,掌握StringBuffer与String的区别. 2,掌握StringBuffer常用方法. 3,掌握StringBuffer实际应用. 1,认识StringBuffer. Stri ...
- StringBuffer类 和 StringBuilder类
上一篇中讲解了String类的用法.那么String有什么特点呢? 字符串特点:字符串是常量,其值在创建后就不能被修改.字符串的内容一旦发生变化,就会创建一个新的对象. 代码验证字符串特点: publ ...
- [Java] StringBuffer类
http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html 注: StringBuffer类和String一样,也用来代表字符串, ...
随机推荐
- NC20861 兔子的逆序对
NC20861 兔子的逆序对 题目 题目描述 兔子最近喜欢上了逆序对.一个逆序对 \((i,j)\) 需要满足 \(i < j\) 且 \(a_i > a_j\) .兔子觉得只是求一个序列 ...
- docker安装Nessus
Nessus家庭版最大只支持扫描16个主机,但利用docker无限使用,当然虚拟机快照也可以. 关于网上其他的破解版,我是没有成功(显示成功了,其实是自慰版),所以才弄得这个镜像 提供两个镜像(不懂d ...
- Grid属性太多记不住?【Grid栅格布局可视化编辑器】直观易懂高效,拖拉拽,有手就行!
手把手教你通过拖拉拽可视化的方式带你练习[Grid栅格布局]的各个属性,直观易懂!再也不愁记不住繁多的Grid属性了.整个过程在众触应用平台进行,不用手写一行CSS代码. grid-auto-flow ...
- day04 缓冲字符流__异常处理
缓冲字符流 缓冲字符输入流:java.io.BufferedReader 是一个高级的字符流,特点是块读文本数据,并且可以按行读取字符串. package io; import java.io.*; ...
- Solution -「HNOI2013」消毒
弱化一下,先考虑在二维上解决问题. 题目就转化为:有 \(n\) 个点 \((i, j)\) 需要被覆盖,而我们每次可以选一行或一列去覆盖,求覆盖所有点的最少选择次数. 如果我们对于每一个 \((i, ...
- Go语言基础五:引用类型-切片和映射
切片 Go的数组长度不可以改变,在某些特定的场景中就不太适用了.对于这种情况Go语言提供了一种由数组建立的.更加灵活方便且功能强大的包装(Wapper),也就是切片.与数组相比切片的长度不是固定的,可 ...
- js实现全屏弹框
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- linux rz上传失败
最近rz上传文件时出现了一次文件上传失败的情况,故搜集了以下资料加强学习 rz -ary --o-sync -a 表示使用ascii码格式传输文件,如果是Dos格式的文件,会转换为unix格式 -r ...
- 关于又拍云免费cdn全网加速服务的长期评测(各种踩坑)
原文转载自「刘悦的技术博客」 ( https://v3u.cn/a_id_128 ) 妇孺皆知,前端优化中最重要的优化手段之一就是cdn加速,所谓cdn加速就是采用更多的缓存服务器(CDN边缘节点), ...
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...