Java常用类(StringBuffer、StringBuilder、Arrays)

一、StringBuffer类

1.StringBuffer类的概述

存储字符的容器,长度可变,是线程安全的可变字符序列

2.StringBuffer类的构造方法
    //public StringBuffer():无参构造方法
    //构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
    //超过了默认容量,可以自动扩充
    StringBuffer sb = new StringBuffer();
    int capacity = sb.capacity(); //获取缓冲区的容量

    int length = sb.length(); //获取长度 实际你往容器中存了多少个字符
3.StringBuffer的添加功能
   StringBuffer sb = new StringBuffer();
    sb.append("abc"); //往容器中添加内容,返回的还是原来那个容器
    sb.insert(2,"皮皮虾,我们走"); //在指定位置,插入数据
    System.out.println(sb);
4.StringBuffer的删除功能
 StringBuffer sb = new StringBuffer();
    sb.append("红尘来呀来去呀去都是一场梦");
    sb.deleteCharAt(0);//删除指定位置的字符,并返回本身

    int index = sb.indexOf("都");
    sb.delete(index,sb.length());//删除从指定位置开始指定位置结束的内容,并返回本身
    System.out.println(sb);
5.StringBuffer的替换和反转功能
  StringBuffer sb = new StringBuffer();
    sb.append("红尘来呀来去呀去都是一场梦");
    //根据起始索引和终止索引替换容器中的一段内容,返回的还是容器本身
    sb.replace(0, sb.lastIndexOf("去")+1, "abc");
    System.out.println(sb);

    sb.reverse(); //反转容器中的数据,返回的还是原来的容器
    System.out.println(sb.toString());
6.StringBuffer的截取功能
  StringBuffer sb = new StringBuffer();
    sb.append("红尘来呀来去呀去都是一场梦");
    //根据索引截取容器中的数据,返回的是一个截取到的新的字符串
    String substring = sb.substring(2);
    String substring1 = sb.substring(2, 5); //含头不含尾
    System.out.println(sb);
    System.out.println(substring);
    System.out.println(substring1);
7.StringBuffer和String的相互转换
//String 他是一个长度固定的字符序列,一旦定义就不能被改变
// StringBuffer 他是换一个长度可变的字符序列,是一个容器,可以往里面不断的追加数据
   
    //String -转换成- StringBuffer
    StringBuffer sb = new StringBuffer("abc");//通过构造方法
    sb.append(100);//通过append()方法

   //StringBuffer -转换成- String
    System.out.println(sb.toString());//通过toString()方法
    System.out.println(sb.substring(2));//使用substring方法
8.案例演示
  1. 把数组转成字符串
//需求:把数组中的数据按照指定个格式拼接成一个字符串
//举例:
//int[] arr = {1, 2, 3};
//输出结果:
//"[1, 2, 3]"
//用StringBuffer的功能实现
public class Mytest {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        StringBuffer sb = new StringBuffer("[");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                sb.append(arr[i]).append("]");
            }else{
                sb.append(arr[i]).append(",");
            }
        }
        String s = sb.toString();
        System.out.println(s);
    }
}
  1. 字符串反转
//案例演示
//需求:把字符串反转
//用StringBuffer的功能实现

public class Mytest {
    public static void main(String[] args) {
        String abc = new StringBuffer("abc").reverse().toString();
        System.out.println(abc);
    }
}

二、StringBuffer类与StringBuilder类的区别

  1. StringBuffer 字符串缓冲区 线程安全的 效率低
  2. StringBuilder 字符串缓冲区 线程不安全 效率高
  3. 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。
    该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

三、String和StringBuffer分别作为参数传递

String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递。

public static void main(String[] args) {
        //基本类型作为参数传递,形参的改变,不影响实参
        //引用类型作为参数传递,形参的改变,会影响实参
        //值传递,引用传递

        //String 类型作为参数传递,跟基本类型一样
        String str = "abc";
        setString(str);
        System.out.println(str); 


        StringBuffer sb = new StringBuffer("你好世界");
        setStringBuffer(sb);
        System.out.println(sb.toString());

    }

    private static void setStringBuffer(StringBuffer sb) {

        sb.append("爱生活,爱Java").reverse();
    }

    private static void setString(String str) {
        str = str + "dddd";
        System.out.println(str);
    }

四、Arrays类

1.Arrays类概述

针对数组进行操作的工具类。
提供了排序,查找等功能。

2.成员方法
public static String toString(int[] a)
public static void sort(int[] a)
public static int binarySearch(int[] a,int key)
public static void main(String[] args) {
        // Arrays
        //此类包含用来操作数组(比如排序和搜索)的各种方法。

        //sort()排序
        int[] arr={1,0,4,6,7,8,100};
        Arrays.sort(arr);

        //toString()把数组给你转成一个漂亮的字符串
        System.out.println(Arrays.toString(arr));

        int[] arr1={10,20,30,40,60,60,70,80,90,100};
        //binarySearch()二分查找的前提条件:元素必须有序
        int i = Arrays.binarySearch(arr, 100);
        System.out.println(i);

    }
3.二分查找
public static void main(String[] args) {
        int[] arr = {10,20, 30, 40, 60, 60, 70, 80, 90, 100};
        //二分查找
        int index=findIndex(arr,100);
        System.out.println("索引是"+index);
    }
    private static int findIndex(int[] arr,int ele) {
        //定义三个变量
        int minIndex=0;
        int maxIndex=arr.length-1;
        int centerIndex=(minIndex+maxIndex)/2;
        while (minIndex<=maxIndex){
            if (ele == arr[centerIndex]) {
                return centerIndex;
            } else if (ele > arr[centerIndex]) {
                minIndex = centerIndex + 1;
            } else if (ele < arr[centerIndex]) {
                maxIndex = centerIndex - 1;
            }
            //重新计算中间索引
            centerIndex = (minIndex + maxIndex) / 2;
        }
        return -1;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值