欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVASE 小白学习笔记 (12-3)Java中的常用类--StringBuffer类、StringBuilder类

程序员文章站 2022-03-19 16:05:55
1.StringBuffer类概述在Java中我们如果对字符串进行拼接操作,每次拼接都能构建一个新的String对象,这样操作既费时有浪费时间,StringBuffer类就能解决这个问题。StringBuffer(字符串缓冲区)是线程安全的可变字符序列,一个类似于String的字符串缓冲区。public class MyTest { public static void main(String[] args) { //通过加号来进行字符串的拼接 String s...

1.StringBuffer类概述

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

  • StringBuffer(字符串缓冲区)是线程安全的可变字符序列,一个类似于String的字符串缓冲区。
public class MyTest {
    public static void main(String[] args) {
        //通过加号来进行字符串的拼接
      String s1="kobe";
      String s2="是著名的篮球运动员";
      String s3=s1+s2;
      System.out.println(s3);
        System.out.println("==========");
      //通过StringBuffer类可以进行字符串的拼接
        StringBuffer sb = new StringBuffer();
        sb.append("kobe");
        sb.append("是著名的篮球运动员");
        System.out.println(sb);
    }

2.StringBuffer类的方法

2.1 StringBuffer类的构造方法

StringBuffer类的构造方法 含义
public StringBuffer() 无参构造方法
public StringBuffer(int capacity) 指定容量的字符串缓冲区对象
public StringBuffer(String str) 指定字符串内容的字符串缓冲区对象
public class MyTest2 {
    public static void main(String[] args) {
        //StringBuffer():构造一个其中不带字符的字符串缓冲区,初始容量为16个字符
        StringBuffer sb = new StringBuffer();
        int capacity = sb.capacity();
        System.out.println(capacity);   //16

        //public StringBuffer(int capacity):指定容量的字符串缓冲区对象
        StringBuffer buffer = new StringBuffer(25);
        int capacity1 = buffer.capacity();
        System.out.println(capacity1);   //25

        //注意:往容器中追加内容,一旦超过容量,就会进行自动扩容处理
        buffer.append("lalalalalalalalalalalalalalalalalalalalalalal");
        System.out.println(buffer);

        //public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
        String s="科比是一名著名的篮球运动员";
        StringBuffer sb1 = new StringBuffer(s);
        System.out.println(sb1);
    }
}

2.2 StringBuffer类的获取长度与容量的方法

在这里注意介绍的是StringBuffer类中的两个容易混淆的方法:

StringBuffer的方法 含义
public int capacity() 返回当前容量
public int length() 返回长度(字符数)
public class MyTest3 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("hello");
        //length()获取长度
        int length = sb.length();
        System.out.println(length);    //5
        //capacity()获取容量
        int capacity = sb.capacity();
        System.out.println(capacity);   //16

    }
}

可以这样理解capacity()方法与length()方法,例如一个水杯的容量为500ml,实际上你接了200ml的水。这时你可以将capacity()方法视为这个水杯的总容量,而length()方法指的是你接的水量。而与此实例唯一不同的是,StringBufffer这个容器,当你添加的字符数超过容量时,会进行自动扩容的现象。


2.3 StringBuffer的添加功能

StringBuffer的添加功能 含义
public StringBuffer append(String str) 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str) 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
public class MyTest4 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
        StringBuffer sb2 = sb.append(100);
        //添加后返回的是容器本身,就可以使用链式编程进行
        StringBuffer sb3 = sb.append("hello").append(123).append(true).append(3.225);
        //StringBuffer重写了toString()方法,把存放在容器中的数据转换器为字符串返回
        String s = sb3.toString();
        System.out.println(s);
    }
};
public class MyTest5 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("我爱你");
        //public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
        sb.insert(0,123);
        System.out.println(sb);    //123我爱你

        //可以采取链式编程在指定的位置上进行追加
        sb.insert(0,"abc").insert(3,"lpom");
        System.out.println(sb);  //abclpom123我爱你
    }
}

2.4 StringBuffer的删除功能

StringBuffer的删除功能 含义
public StringBuffer deleteCharAt(int index) 删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end) 删除从指定位置开始指定位置结束的内容,并返回本身
public class MyTest6 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("科比是一名著名的篮球运动员");
        //public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
        sb.deleteCharAt(3);
        System.out.println(sb);  //科比是名著名的篮球运动员

        //public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
        sb.delete(3,7);  //删除从指定开始位置到指定定结束位置,含头不含尾
        System.out.println(sb);  //科比是篮球运动员

    }
}

2.5 StringBuffer的替换与反转功能

StringBuffer的替换与反转方法 含义
public StringBuffer replace(int start,int end,String str): 从start开始到end用str替换
public StringBuffer reverse() 字符串反转
public class MyTest7 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("大漠孤烟直,长河落日圆");
        //public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
        sb.replace(0,5,"宁为百夫长");
        System.out.println(sb);    //"宁为百夫长,长河落日圆"

        //public StringBuffer reverse():字符串反转
        //反转容器中的内容,注意返回的还是容器本身
        sb.reverse();
        System.out.println(sb);//"圆日落河长,长夫百为宁"
    }
}

2.6 StringBuffer查找字符串功能

项目 Value
int indexOf (String str) 从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
int indexOf (String str,int fromIndex) 从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
int lastIndexOf (String str) 从后往前查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
int lastIndexOf (String str,int fromIndex) 从后往前, 从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
public class MyTest8 {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer("asffghksk");
        // int indexOf (String str):从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
        int i = buffer.indexOf("s");
        System.out.println(i);     //1
        int i1 = buffer.indexOf("m");
        System.out.println(i1);    //-1

        //int indexOf (String str,int fromIndex):从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
        int i2= buffer.indexOf("f", 3);
        System.out.println(i2);   //3


        // int lastIndexOf (String str): 从后往前查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
        int i3 = buffer.lastIndexOf("ff");
        System.out.println(i3);     //2

        //int lastIndexOf (String str,int fromIndex):从后往前按从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
        int i4 = buffer.lastIndexOf("ff", 1);
        System.out.println(i4);
    }
}

2.7 StringBuffer截取功能

项目 Value
public String substring(int start) 从指定位置截取到末尾
ublic String substring(int start,int end) 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

注意:返回值类型不再是StringBuffer本身,而是字符串

public class MyTest9 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("科比是一名著名的运动员");
        //public String substring(int start):从指定位置截取到末尾
        // 返回值类型不再是StringBuffer本身
        String s = sb.substring(0);
        System.out.println(s);   //"科比是一名著名的运动员"
        //public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
        String s1= sb.substring(0, 2);
        System.out.println(s1);  //"科比"

    }
}

2.8 StringBuffer与String之间的相互转换

ring类型转换为StringBuffer类型的方式
1.通过构造方法
2.通过append()方法
3.通过insert()方法
public class MyTest10 {
    public static void main(String[] args) {
        //将String类型转换为StringBuffer类型
        //1.通过构造方法进行转换
        StringBuffer sb = new StringBuffer("hello");
        //2.通过StringBuffer类的append()方法进行转换
        StringBuffer sb1 = new StringBuffer();
        sb1.append("helloworld");
        //通过StringBuffer类的insert()方法进行转换
        StringBuffer sb2 = new StringBuffer();
        sb2.insert(0,"hellojava");
    }
}
StringBuffer类型转换为 String类型
1.使用toString()方法进行转换
2.使用substring()方法进行转换
3.使用构造方法进行转换
public class MyTest11 {
    public static void main(String[] args) {
        //将StringBuffer转换为String
        StringBuffer sb = new StringBuffer();
        sb.append("helloworld");
        //1.通过toString方法进行转换
        String s = sb.toString();
        System.out.println(s);
        //2.通过substring方法进行转换
        String s1 = sb.substring(0);
        System.out.println(s1);
        //3.通过构造方法进行转换
        String s2 = new String(sb);
        System.out.println(s2);
    }
}

2.9 StringBuffer的案例习题

  • 1.把数组转成字符串, 需求:把数组中的数据按照指定个格式拼接成一个字符串。 举例:int[] arr = {1,2,3}; 输出结果: "[1, 2, 3]"用StringBuffer的功能实现
public class MyTest12 {
    public static void main(String[] args) {
        /*把数组转成字符串, 需求:把数组中的数据按照指定个格式拼接成一个字符串。
          举例:int[] arr = {1,2,3}; 输出结果: "[1, 2, 3]"用StringBuffer的功能实现
         */
        int []arr={1,2,3};
        String s="[";
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < arr.length; i++) {
            if(i==sb.length()-1){
               sb.append(s).append(arr[i]).append("]");
            }
            else{
                sb.append(arr[i]);
            }
        }
        System.out.println(Arrays.toString(arr));     //"[1, 2, 3]"
    }
}
  • 2.把字符串反转。举例:键盘录入"abc" ,输出结果:“cba” ,用StringBuffer的功能实现
import java.util.Scanner;
public class MyTest13 {
    public static void main(String[] args) {
        //把字符串反转。举例:键盘录入"abc" ,输出结果:“cba” ,用StringBuffer的功能实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        StringBuffer sb = new StringBuffer(s);
        sb.reverse();
        System.out.println(sb.toString());
    }
}

输出的结果为:
JAVASE 小白学习笔记 (12-3)Java中的常用类--StringBuffer类、StringBuilder类


3.StringBuffer和StringBuilder的区别

  • StringBuffer:线程安全的长度可变字符容器,线程安全,效率低。
  • StringBuilder:线程不安全的长度可变字符容器,(单线程使用时比StringBuffer的效率更快)线程不安全,效率高。
    JAVASE 小白学习笔记 (12-3)Java中的常用类--StringBuffer类、StringBuilder类

JAVASE 小白学习笔记 (12-3)Java中的常用类--StringBuffer类、StringBuilder类


4. StringBuffer与StringBuilder的传参问题形式参数问题

  • 引用数据类型作为参数传递,形参的改变会影响实参
  • 基本数据类型作为参数传递,形参的改变不影响实参
  • 注意:字符串是常量,在参数传递时属于值传递(字符串虽说是引用数据类型,但它作为参数传递时属于值传递,与基本数据类型传参原则保持一致)
public class MyTest14 {
    public static void main(String[] args) {
        /*1.String作为参数传递 String虽然是引用类型,但是它是一个常量,
          所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递,String类型输入值传递
          2.StringBuffer作为参数传递,为引用数据类型传递,行参的改变会影响实参
         */
        String str="abc";
        test(str);
        System.out.println(str);  //abc

        StringBuilder sb = new StringBuilder("科比是一名篮球运动员");
        test(sb);
        System.out.println(sb.toString()); //科比是一名篮球运动员,他投篮很飘逸
    }

    private static void test(StringBuilder sb) {
        sb.append(",他投篮很飘逸");

    }

    private static void test(String str) {
        str+="efg";
        System.out.println(str);  //abcefg
    }
}

5.StringJoiner的介绍(JDK1.8后)

  • StringJoiner是用来构建一个字符序列由一个分隔符分隔,可以从一个提供前缀和结束与提供的后缀。
StringJoiner的构造方法 含义
StringJoiner(CharSequence delimiter) 构建了一个字符容器,指定分隔符
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 构建了一个字符容器,指定分隔符,前缀,后缀
StringJoiner的其他方法介绍 含义
StringJoiner add(CharSequence newElement) 增加了一份给 CharSequence值的 StringJoiner价值的下一个元素
int length() 返回该 StringJoiner的 String表示长度
String toString() 把容器中的数据以字符串返回
import java.util.StringJoiner;
public class MyTest15 {
    public static void main(String[] args) {
        StringJoiner sj = new StringJoiner(",");
        sj.add("aaa").add("bbb").add("ccc");
        System.out.println(sj.toString());    //"aaabbbccc"
        System.out.println("=============");
        StringJoiner sj1 = new StringJoiner(",", "[", "]");
        sj1.add("aaa").add("bbb").add("ccc");
        System.out.println(sj1);      //"[aaa,bbb,ccc]"
    }
}

案例:把数组中的数据按照指定格式拼接成一个字符串,举例:int []arr={1,2,3};输出结果为:"[1,2,3]",用StringJoiner进行实现

import java.util.StringJoiner;
public class MyTest16 {
    public static void main(String[] args) {
          /*把数组中的数据按照指定格式拼接成一个字符串,举例:int []arr={1,2,3};
          输出结果为:"[1,2,3]",用StringJoiner进行实现*/
          int []arr={1,2,3};
          StringJoiner stringJoiner = new StringJoiner(",","[","]");
        for (int i = 0; i < arr.length; i++) {
            stringJoiner.add(arr[i]+"");

        }
        System.out.println(stringJoiner.toString());
    }
}

本文地址:https://blog.csdn.net/qq_41537102/article/details/111826220

相关标签: JAVASE java