常见对象·StringBuffer类

StringBuffer类概述

* A:StringBuffer类概述
  * 通过 JDk 提供的API,查看StringBuffer类的说明
  * 线程安全的可变字符序列,效率相对于StringBuilder 低

* B:StringBuffer 和 String的区别
  * String 是一个不可变的字符序列
  * StringBuffer 是一个可变的字符序列

StringBuffer类的构造方法

* A:StringBuffer 的构造方法:
  * public StringBuffer() :无参构造
  * public StringBuffer(int capacity) :指定容量的字符串缓冲区对象
  * public StringBuffer(String str) :指定字符串内容的字符串缓冲区对象

* B:StringBuffer的方法:
  * public int capacity() :返回当前容量 (理论值)
  * public int length() :返回长度 (字符数)

* C:案例演示:
  * 构造方法和长度方法的使用

package com.heima.stringbuffer;

public class Demo1_StringBuffer {

    public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println(sb.length()); // 容器中的字符个数,实际值,初始为0
System.out.println(sb.capacity()); // 容器的初始容量,理论值,初始为16 StringBuffer sb2 = new StringBuffer(10); // 更改初始值
System.out.println(sb2.length());
System.out.println(sb2.capacity()); StringBuffer sb3 = new StringBuffer("heima");
System.out.println(sb3.length()); // 实际字符的个数
System.out.println(sb3.capacity()); // 字符串长度 + 初始容量
// 一般使用空参,只要满了,底层就会自动扩充
}
}

StringBuffer

StringBuffer的添加功能

* A:StringBuffer的添加功能
  * public StringBuffer apppend(String str) :
    * 可以把任意类型的数据添加到字符串缓冲区里面,并且返回字符串缓冲区本身
  * public StringBuffer insert(int offset, String str) :
    * 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

package com.heima.stringbuffer;

public class Demo2_StringBuffer {
/*
* StringBuffer时字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组
* 当调用添加方法时,不会再重新创建对象,它不断向原缓冲区添加字符 如果再new的话,就又会创建新容器了
*
*/
public static void main(String[] args) {
// demo1();
demo2();
} public static void demo2() {
StringBuffer sb = new StringBuffer("123456");
sb.insert(3, "heima"); // 使"heima"成为第三个索引值,如果没有索引位置就会报错
System.out.println(sb);
} private static void demo1() {
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = sb.append(true);
StringBuffer sb3 = sb.append("heima");
StringBuffer sb4 = sb.append(100);
// 4个引用实际上指向了同1个对象 System.out.println(sb); // 实际上打印时,调用了toString()方法,StringBuffer类中重写了该方法
System.out.println(sb2);
System.out.println(sb3);
System.out.println(sb4);
}
}

StringBuffer

StringBuffer的删除功能

* A:StringBuffer的删除功能:
  * public StringBuffer deleteCharAt(int index) :
    * 删除指定位置的字符,并且返回其本身
  * public StringBuffer delete(int start, int end) :
    * 删除从指定位置开始指定位置结束的内容,并且返回其本身

package com.heima.stringbuffer;

public class Demo3_StringBuffer {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
//sb.deleteCharAt(5); // 当缓冲区中这个索引上没有元素的时候就会报 java.lang.StringIndexOutOfBoundsException异常
sb.append("heima");
sb.deleteCharAt(4); // 根据索引删除掉索引位置上对应的字符
sb.delete(0, 2); // 删除指定范围内的字符串,包含头不包含为,前闭后开
sb.delete(0, sb.length()); // 清空缓冲区 //sb = new StringBuffer(); // 不要用这种方式清空缓冲区,原来的会变成垃圾
System.out.println(sb);
}
}

StringBuffer

StringBuffer的替换和反转功能

* A:StringBuffer的替换功能
  * public StringBuffer replace(int start, int end, String str) :
    * 从start开始到end用str替换

* B:StringBuffer的反转功能
  * public StringBuffer reverse() :
    * 字符串反转

package com.heima.stringbuffer;

public class Demo4_StringBuffer {

    public static void main(String[] args) {
StringBuffer sb = new StringBuffer("heima");
sb.replace(0, 3, "bai"); // 替换,包含头不包含尾,前闭后开
System.out.println(sb); sb.reverse(); // 反转
System.out.println(sb);
} }

StringBuffer

StringBuffer的截取功能及注意事项

* A:StringBuffer的截取功能
  * public String substring(int start) :
    * 从指定位置截取到末尾
  * public String substring(int start, int end) :
    * 截取从指定位置开始到结束,包括开始,不包括结束

* B:注意事项:
  * 返回值类型是String 而不是 StringBuffer

package com.heima.stringbuffer;

public class Demo5_StringBuffer {

    public static void main(String[] args) {
StringBuffer sb = new StringBuffer("woaiheima");
String str1 = sb.substring(4); // 类似字符串中的substring() 方法 System.out.println(str1);
System.out.println(sb); // sb并没有改变 String str2 = sb.substring(4, 7); // 包含头不包含尾
System.out.println(str2);
}
}

StringBuffer

StringBuffer和String的互相转换

* A:String -- StringBuffer
  * a:通过构造方法
  * b:通过append() 方法

* B:StringBuffer -- String
  * a:通过构造方法
  * b:通过toString() 方法
  * c:通过substring(0, length) 方法

package com.heima.stringbuffer;

public class Demo6_StringBufferMethod {
/*
* alt + shif + r ,给java文件改名
*/
public static void main(String[] args) {
// demo1(); // String 变 StringBuffer
// demo2(); // StringBuffer 变 String
} public static void demo2() {
StringBuffer sb = new StringBuffer("heima");
String s1 = new String(sb);// 通过构造方法将StringBuffer转换为String
System.out.println(s1); String s2 = s1.toString();
System.out.println(s2);// 通过toString方法将StringBuffer转换为String
// 一般用toString方法
String s3 = sb.substring(0);
System.out.println(s3);// 通过截取字符串将StringBuffer转换为String
} private static void demo1() {
StringBuffer sb1 = new StringBuffer("heima");
System.out.println(sb1);// 通过构造方法,将字符串转换为StringBuffer对象 StringBuffer sb2 = new StringBuffer();
sb2.append("heima");// 通过append将字符串转换为StringBuffer对象
System.out.println(sb2);
}
}

StringBuffer

把数组转换成字符串

* A:案例演示
  * 需求:把数组中的数据按照指定的格式拼接成一个字符串
  *
  *   举例:
       int[ ] arr = {1, 2, 3};

  *   输出结果:
       "[1, 2, 3]"

  *  用StringBuffer 的功能实现

package com.heima.test;

public class Test1 {

    public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
System.out.println(arrayToString(arr));
}
/*
* 方法分析:
* 1、方法返回值类型为 String
* 2、参数列表 int[]
*/
public static String arrayToString(int[] arr) {
// 将数组转换为字符串,书写习惯,用2代替to
StringBuffer sb = new StringBuffer(); // 创建字符串缓冲区对象
sb.append("["); // 将[添加到缓冲区 for (int i = 0; i < arr.length; i++) { // 遍历数组
if (i == arr.length - 1) {
sb.append(arr[i]).append("]");
} else {
sb.append(arr[i]).append(", ");
}
}
return sb.toString(); }
}

Test1

字符串反转

* A:案例演示
  * 需求:把字符串反抓
  *
  *  举例:键盘输入abc
     输出结果:"cba"

  *  用StringBuffer的功能实现

package com.heima.test;

import java.util.Scanner;

public class Test2 {

    public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 创建键盘录入对象
String line = sc.nextLine(); // 将键盘录入的字符串存储再line中 /*StringBuffer sb = new StringBuffer(line);//将字符串转换为StringBuffer对象
sb.reverse(); // 将缓冲区的内容反转
System.out.println(sb.toString());*/ line = stringReverse(line);
System.out.println(line); }
/*
* 方法分析:
* 1、返回值类型,String
* 2、参数列表 String line
*/
public static String stringReverse(String line) {
StringBuffer sb = new StringBuffer(line);
sb.reverse();
return sb.toString();
}
}

Test2

StringBuilder和StringBuffer的区别

* A:StringBuilder 的概述
  * 通过查看API了解一下StringBuilder类

* B:面试题
  * String, StringBuffer, StringBuilder 的区别

  * StringBuffer 和 StringBuilder 的区别
  * StringBuffer 是JDK1.0版本的,是线程安全的,效率低
  * StringBuilder 是JDK1.5版本的,是线程不安全的,效率高

  * String 和StringBuffer, StringBuilder 的区别
  * String 是一个不可变的字符序列
  * StringBuffer,StringBuilder 是可变的字符序列

String和StringBuffer分别作为参数传递

* A:形式参数问题
  * String作为参数传递
  * StringBuffer 作为参数传递

* B:案例演示
  * String 和 StringBuffer 分别作为参数传递的问题

package com.heima.stringbuffer;

public class Demo7_StringBuffer {
/*
* 基本数据类型的值传递,不改变其值
* 引用数据类型的值传递,改变其值
*/
public static void main(String[] args) {
String s = "heima";
System.out.println(s);
Change(s);
//string类虽然是引用数据类型,但是他当作参数传递时和基本数据类型是一样的,是按值传递
System.out.println(s);
System.out.println("-----------------");
StringBuffer sbBuffer = new StringBuffer(s);
System.out.println(sbBuffer);
Change(sbBuffer);
//StringBuffer类是传地址
System.out.println(sbBuffer);
} public static void Change(String s) {
s += "itcast";
} private static void Change(StringBuffer sbBuffer) {
sbBuffer.append("itcast");
} }

StringBuffer

Java 常见对象 03的更多相关文章

  1. Java常见对象Object类中的个别方法

    Java常见对象Object类 public int hashCode() : 返回该对象的哈希码值. 注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值.你可以理解成 ...

  2. Java 常见对象 05

    常见对象·正则表达式 和 其他类 正则表达式的概述和简单使用 * A:正则表达式 * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则,有自己的特殊应用 * 作用: ...

  3. Java 常见对象 02

    常见对象·String类 Scanner 的概述和方法介绍 * A:Scanner 的概述 * B:Scanner 的构造方法原理 * Scanner(InputStream source) * Sy ...

  4. Java 常见对象 04

    常见对象·Arrays 类和 包装类 数组高级冒泡排序原理图解 * A:画图演示 * 需求: 数组元素:{24, 69, 80, 57, 13} 请对数组元素进行排序 * 冒泡排序: 相邻元素两两比较 ...

  5. Java 常见对象 01

    常见对象·Object类 Object类的概述 * A:Object 类概述 * 类层次结构的根类 * 所有类都直接或间接地继承自该类 * B:构造方法 * public Object() * 回想为 ...

  6. Java常见对象之String

    String类的概述 String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现.字符串是常量,一旦被赋值,就不能被改变. String ...

  7. Java常见对象内存分析

    首先要明确Java内存的个位置上放的是啥 类.对象.实例三者的关系: 1.类:是对象的模板,可以实例化对象.(this不能出现在静态方法中) 2.对象:类的个体. 3.实例:实现的对象. 4.对应的引 ...

  8. day11<Java开发工具&常见对象>

    Java开发工具(常见开发工具介绍) Java开发工具(Eclipse中HelloWorld案例以及汉化) Java开发工具(Eclipse的视窗和视图概述) Java开发工具(Eclipse工作空间 ...

  9. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

随机推荐

  1. oslab oranges 一个操作系统的实现 实验四 认识保护模式(三):中断异常

    实验目的: 理解中断与异常机制的实现机理 对应章节:第三章3.4节,3.5节 实验内容: 1. 理解中断与异常的机制 2. 调试8259A的编程基本例程 3. 调试时钟中断例程 4. 建立IDT,实现 ...

  2. codeforces 11B Jumping Jack

    Jack is working on his jumping skills recently. Currently he's located at point zero of the number l ...

  3. URL parser All In One

    URL parser All In One const url = new URL(`https://admin:1234567890@cdn.xgqfrms.xyz:8080/logo/icon.p ...

  4. CSS ? Layout Module : CSS 布局模型

    1 1 1 https://www.w3.org/TR/css-grid-1/ CSS Grid Layout Module Level 1 W3C Working Draft, 19 May 201 ...

  5. React render twice bug

    React render twice bug React bug constructor render twice bug update render twice bug StrictMode htt ...

  6. js class static property & public class fields & private class fields

    js class static property class static property (public class fields) const log = console.log; class ...

  7. Chrome V8 引擎源码剖析

    Chrome V8 引擎源码剖析 V8 https://github.com/v8/v8 array & sort https://github.com/v8/v8/search?l=Java ...

  8. Masterboxan INC 下半年将聚焦超高净值和家族全权委托客户

    "投资是一个没有终点的奋斗.我们不能简单的预测市场,而是应对市场做出正确的反应.这需要我们不断反思.总结.提升,找到自己的投资哲学,然后用一生的时间去坚守."Masterboxan ...

  9. 彻底理解c++的隐式类型转换

    隐式类型转换可以说是我们的老朋友了,在代码里我们或多或少都会依赖c++的隐式类型转换. 然而不幸的是隐式类型转换也是c++的一大坑点,稍不注意很容易写出各种奇妙的bug. 因此我想借着本文来梳理一遍c ...

  10. 聊聊ASP.NET Core中的配置

    ​作为软件开发人员,我们当然喜欢一些可配置选项,尤其是当它允许我们改变应用程序的行为而无需修改或编译我们的应用程序时.无论你是使用新的还是旧的.NET时,可能希望利用json文件的配置.在这篇文章中, ...