文章目录

  • StringBuffer类基本介绍
  • String VS StringBuffer
  • StringBuffer的构造器
  • StringBuffer <=> String 相互转换
  • StringBuffer类常见对象
  • StringBuffer类练习题目分析
    • 案例

StringBuffer类基本介绍

  • java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
  • 很多方法与String相同,但StringBuffer是可变长度的
  • StringBuffer是一个容器

String VS StringBuffer

  1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低 //private final char value[];
  2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高

char[] value;//这个放在堆空间

package com.tao.stringbuffer_;/*** Create By 刘鸿涛* 2022/1/2 17:21*/
public class StringBuffer01 {public static void main(String[] args) {//1.StringBuffer 的直接父类是 AbstractStringBuilder//2.StringBuffer 实现了 Serializable接口,即StringBuffer的对象可以串行化//3.在父类中 AbstractStringBuilder 有属性 char[] value,不是final//  该 value数组存放 字符串内容,因此存放在堆中//4.StringBuffer是一个final类//5.因为StringBuffer 字符内容是在 char[]value ,所以在变化(增加/删除)//      不用每次都更换地址(即不是每次创建新对象),所以效率高于StringStringBuffer stringBuffer = new StringBuffer("hello");}
}

StringBuffer的构造器

package com.tao.stringbuffer_;/*** Create By 刘鸿涛* 2022/1/2 17:34*/
public class StringBuffer02 {public static void main(String[] args) {//构造器的使用//1.创建一个 大小为 16的 char[],用于存放字符内容StringBuffer stringBuffer = new StringBuffer();//2.通过构造器指定 char[]大小StringBuffer stringBuffer1 = new StringBuffer(100);System.out.println(stringBuffer1.length());     //0//3.通过 给一个String 创建 StringBuffer,char[] 大小就是//      stringBuffer1.length() + 16StringBuffer hello = new StringBuffer("hello");System.out.println(hello.length()); //5System.out.println(hello);          //hello}
}

StringBuffer <=> String 相互转换

package com.tao.stringbuffer_;/*** Create By 刘鸿涛* 2022/1/2 17:44*/
public class StringBuffer03 {public static void main(String[] args) {//看 String -> StringBufferString str = "hello tom";//方式1 使用构造器//注意:返回的才是StringBuffer对象,对str 本身没有影响StringBuffer stringBuffer = new StringBuffer(str);System.out.println(stringBuffer + "\t" + str);  //hello tom  hello tom//方式2 使用的是append方法StringBuffer stringBuffer1 = new StringBuffer();stringBuffer1 = stringBuffer1.append(str);System.out.println(stringBuffer1);          //hello tom//看看 StringBuffer -> String//方式1StringBuffer stringBuffer2 = new StringBuffer("鬼鬼");String s = stringBuffer2.toString();System.out.println(s);                      //鬼鬼//方式2String s1 = new String(stringBuffer2);System.out.println(s1);                     //鬼鬼}
}

StringBuffer类常见对象

  1. 增 append
  2. 删 delete(start,end)
  3. 改 replace(start,end,string)->将start—end 间的内容替换掉,不含end
  4. 查 indexOf->查找子串在字符串第1次出现的索引,如果找不到返回 -1
  5. 插 insert
  6. 获取长度 length
package com.tao.stringbuffer_;/*** Create By 刘鸿涛* 2022/1/2 18:10*/
public class StringBufferMethod {public static void main(String[] args) {//        1. 增 appendStringBuffer s = new StringBuffer("hello");s.append(",");System.out.println(s);      //hello,s.append("赵敏").append(100).append(true).append(10.0);System.out.println(s);      //实际上是s.toString() -> hello,赵敏100true10.0//        2. 删 delete(start,end)/*删除索引为 >= start && end 处的字符解读:删除 5 ~ 15 的字符   [11,14)*/s.delete(5,15);System.out.println(s);      //hello10.0//        3. 改 replace(start,end,string)->将start---end 间的内容替换掉,不含ends.replace(1,5,"周芷若");  //h周芷若10.0System.out.println(s);//        4. 查 indexOf->查找子串在字符串第1次出现的索引,如果找不到返回 -1int s2 = s.indexOf("周芷若");System.out.println(s2);     //1//        5. 插 inserts.insert(1,"鬼鬼");System.out.println(s);      //h鬼鬼周芷若10.0//        6. 获取长度 lengthSystem.out.println(s.length());}
}

StringBuffer类练习题目分析

String str = null;
StringBuffer sb = new StringBuffer();
sb.append(str); //需要看源码,底层调用的是AbstractStringBuilder 的 appendNull
System.out.println(sb.length());    //4 所以字符数组null 4个长度System.out.println(sb);              //null
StringBuffer sb1 = new StringBuffer(str);  //这里看源码,首先是有参构造器,调用super(str.length() + 16),因为str没有长度,所以会抛出空指针异常
System.out.println(sb1);            //wrong
案例
  • 输入商品名称和商品价格,要求打印效果示例,使用前面学习的方法完成;

  • 商品名 商品价格

  • 手机 123,456.78 //比如 3,456,789.10

  • 要求:价格的小数点前面每三位用逗号隔开,再输出

Mycode

package com.tao.stringbuffer_;import java.util.Scanner;/*** Create By 刘鸿涛* 2022/1/2 18:38*/
public class StringBufferExercise01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.next();int point = input.indexOf('.');System.out.println(point);StringBuffer price = new StringBuffer(input);if(point > 3)price.insert(point - 3,',');if(point > 6)price.insert(point - 6,',');System.out.println(price);}
}

Teacher 's code

package com.tao.stringbuffer_;import java.util.Scanner;/*** Create By 刘鸿涛* 2022/1/2 18:38*/
public class StringBufferExercise01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.next();int point = input.indexOf('.');System.out.println(point);StringBuffer price = new StringBuffer(input);for(int i = point; i > 3 ; i -= 3){price.insert(i - 3,',');}System.out.println(price);}
}

Java - 常用类 - StringBuffer类相关推荐

  1. Java 常用对象-StringBuffer类

    2017-11-02 20:57:02 StringBuffer:线程安全的可变字符序列.一个类似于 String 的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某些 ...

  2. java.util类,GitHub - yutaolian/JavaUtils: 总结的一些Java常用的util类

    JavaUtils 总结的一些Java常用的util类 ###1.格式化时间 SimpleDateFormat(DateFormat)实现线程安全的使用 众所周知SimpleDateFormat(Da ...

  3. Java常用接口与类——String类、StringBuffer类、StringBuilder类

    >String的构造方式 //这两种方式字符串的值是相同的,但在内存中的地址不同: //s1是在常量池中,常量池中有一个hello,同一常量只会放入一次: String s1="hel ...

  4. JAVASE学习笔记 Java中的常用类--StringBuffer类、StringBuilder类

    1.StringBuffer类概述 在Java中我们如果对字符串进行拼接操作,每次拼接都能构建一个新的String对象,这样操作既费时有浪费时间,StringBuffer类就能解决这个问题. Stri ...

  5. day15 Java 常用类 StringBuffer类

    文章目录 一.构造方法 1.1 StringBuffer() 1.2 StringBuffer(int capacity) 1.3 StringBuffer(String str) 二.StringB ...

  6. stringbuffer java API_JAVA-基础-常用API(StringBuffer类,正则表达式)

    字符串缓冲区 StringBuffer类 查阅StringBuffer的API,StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列 ...

  7. [JAVA基础类库] String类 ○ StringBuffer类 ○ StringBuilder类

    引言 字符串就是一连串的字符序列,Java提供了String.StringBuffer和StringBuilder三个类来封装对字符串,并提供了系列方法来操作字符串对象. String类是不可变类的: ...

  8. java.lang包—StringBuffer类和StringBuilder类

    目录 一.数据结构 二.线程安全性分析 三.源码 四.适用场景 一.数据结构 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串.String 类是不可变类,即一旦一 ...

  9. java常用文件工具类

    java常用工具类(一) 主要是Java操作文件及及IO流的一些常用库,是Apache对java的IO包的封装,这里面文件类工具有两个非常核心的类FilenameUtils跟FileUtils,IO流 ...

最新文章

  1. C#隐藏手机号中间四位为*
  2. R语言使用coin包应用于独立性问题的置换检验(permutation tests)、使用普通cor.test函数和置换近似spearman_test函数、检验变量的相关性的显著性
  3. 雷军的“初恋”回来了
  4. Mac OS X 修复基本命令失效的问题
  5. boost::mp11::mp_transform相关用法的测试程序
  6. P1991-无线通讯网【最小生成树,瓶颈生成树】
  7. Andrew Ng 的 Machine Learning 课程学习 (week4) Multi-class Classification and Neural Networks
  8. 老婆回家时没有帮老婆打点,也完全忘记提醒老婆晚上火车上很凉,内疚.亲爱的,对不起!...
  9. Android-广播
  10. python爬虫详解
  11. 怎样用计算机粉碎文件夹,电脑粉碎文件用什么软件好,怎么彻底粉碎电脑文件...
  12. 服务器server.c、搜索serach.c
  13. 简述T568A和T568B的区别
  14. 手把手教你如何免费把多张图片合并为PDF文件,一看就懂。
  15. 无法使用计算机名访问共享,局域网内无法用计算机名访问共享的解决办法
  16. GNSS/INS组合导航(八):INS/GPS组合导航
  17. Web安全-ReDos正则表达式的拒绝服务攻击
  18. CSS复合选择器:后代选择器
  19. Android连接SQLServer详细教程(数据库+服务器+客户端),并在微软Azure云上搭建云服务
  20. kingcms修改笔记

热门文章

  1. 基于华为LiteOS和NB-IoT的智慧楼宇消防系统
  2. Autolisp 通过关键字合并图层
  3. matebook x pro 显示不流畅问题的解决
  4. JAVA多商户商城小程序源码带拼团秒杀积分全开源系统商城
  5. JavaScript学习思维导图(三)
  6. dicom转nii时,解决切片顺序保存混乱的问题
  7. css实现背景色渐变效果
  8. 2023秋招——快手数据研发一、二面面经
  9. 汽车产业工业软件洞察:从辅助到支配
  10. 如何使用MATLAB绘制绕线画?附带颜色渲染