String StringBuffer 和StringBuilder

一、String类的理解和创建对象

12313123123213
String实现了Serializable借口说明String可以串行化(可以在网络传输)
String实现了Comparable借口说明String对象可以比较

1.String细节

  1. String对象用于保存字符串,也就是一组字符序列
public class String01 {
    public static void main(String[] args) {
        String name = "jack";
    }
}
  1. 字符串常量对象是用于双引号括起的字符序列。例如“你好”,“12.97”等
  2. 字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
  3. String类较常用构造方法(其他看手册):
  • String s1 = new String();
  • String s2 = new String(String original);
  • String s3 = new String(char[] a);
  • String s4 = new String(char[] , int startindex,int count);
  • String s5 = new String(byte[] b);
  1. String是个final类不能被其他类继承
  2. String有属性:ptivate final char value[];用于存放字符串内容;value是一个final类型,不可以修改(地址)单个字符内容可以修改

2.两种创建String对象的区别

方式1

直接赋值 String s = “jack”;
先从常量池查看是否有"jack"的数据空间, 如果有,直接指向,如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
在这里插入图片描述

方式2

调用构造器 String s2 = new String(“jack”);
先在堆种创建空间,里面维护了value属性,指向常量池的jack空间。如果常量池没有则重新创建,如果有则直接通过value指向。最终指向的是堆中的空间地址

二、String类的常见方法

1.equalsIgnoreCase(String str)

忽略大小写的判断内容是否相等

public class String01 {
    public static void main(String[] args) {
        String name1 = "jack";
        String name2 = "Jack";
        System.out.println(name1.equalsIgnoreCase(name2));
    }
}

2.length()

返回字符串的长度

public class String01 {
    public static void main(String[] args) {
        String name1 = "jack";
        String name2 = "Jack";
        System.out.println(name1.length());
    }
}

3.indexOf(String str)

获取字符在字符串对象中第一次出现的索引,索引从0开始如果找不到则返回-1

public class String01 {
    public static void main(String[] args) {
        String s1 = "sad@qawdas@d";
        int index = s1.indexOf('@');
        System.out.println(index);
    }
}

4.lastIndexOf(String str)

获取字符在字符串对象中最后一次出现的索引,索引从0开始如果找不到则返回-1

public class String01 {
    public static void main(String[] args) {
        String s1 = "wer@sadqw@aed";
        int index = s1.lastIndexOf('@');
        System.out.println(index);
    }
}

5.substring(int i)

表示从第i个开始索引到最后索引从0开始计算
如果是substring(int i , int n)则表示从第i个开始索引,截取到第n个 字符

public class String01 {
    public static void main(String[] args) {
        String name = "hello,jack";
        System.out.println(name.substring(6));//从索引6开始截取后面的索引内容
        System.out.println(name.substring(0,5));//从索引0开始截取5个字符
    }
}

6.toUpperCase()

转换为大写

public class String01 {
    public static void main(String[] args) {
        String s = "hello";
        System.out.println(s.toUpperCase());
    }
}

7.toLowerCase()

转换为小写

public class String01 {
    public static void main(String[] args) {
        String s = "HELLO";
        System.out.println(s.toLowerCase());
    }
}

8.concat(“”)

表示拼接

public class String01 {
    public static void main(String[] args) {
        String s = "HELLO";
        s = s.concat("12").concat("jack");
        System.out.println(s);//输出HELLO12jack
    }
}

9.replace(String str1,String str2)

表示替换将原先内部str1全部转换为str2
replace不接收对原先值不产生影响

public class String01 {
    public static void main(String[] args) {
        String s = "HELLO  222 233 44";
        System.out.println(s.replace("LL","22"));//HE22O  222 233 44

    }
}

10.split(“\\”)

表示按照括号内标准进行分割,如果是特殊字符则需要加入转义符" \ "

public class String01 {
    public static void main(String[] args) {
        String s = "E:\\aaa\\bbb";
        String split[] = s.split("\\\\");
        for (int i = 0; i < split.length; i++) {
            System.out.println(split[i]);
        }
    }
}

10.toCharArray()

转换成字符数组

public class String01 {
    public static void main(String[] args) {
        String s = "happy";
        char[] ch = s.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.println(ch[i]);
        }
    }
}

10.compareTo(String str)

比较字符串,1.如果两个字符串长度不同则长度相减2.如果字符串长度相同则比较第一个字符每个的第一个字符相减

public class String01 {
    public static void main(String[] args) {
        String a = "jchn";
        String b = "jack";
        System.out.println(a.compareTo(b));
    }
}

11.format 格式化字符串

用来格式化,%s ,%d,%c,%.2f都是占位符

public class String01 {
    public static void main(String[] args) {
        String name = "jack";
        int  age = 10;
        String info =String.format("我的名字是%s我的年龄是%d",name,age);
        System.out.println(info);
    }
}

三、StringBuffer

1基本介绍

  • java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
  • 很多方法和String相同,但是StringBuffer是可变长度的
  • StringBuffer是一个容器
    在这里插入图片描述
    StringBuffer的直接父类是AbstractStringBuilder
    并且实现了java.io.Serializable, CharSequence接口表示可以串行化
    在父类AbstractStringBuilder中有个char[]属性 value,不是final型
    该value数组存放字符串内容 因此存放在堆中不再是常量池
    StringBuffer是final类不能被继承

2.String vs StringBuffer

  • String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率极低
  • StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率更高

3. StringBuffer的构造器

在这里插入图片描述
注意最后一个构造器是放入一个字符串然后char数组大小再加16

4. StringBuffer和String的转换

1.String转成StringBuffer

public class StringBuffer01 {
    public static void main(String[] args) {
        String str = "jack";
        //方法一返回才是StringBuffer对象对str本身没有影响
        StringBuffer stringBuffer = new StringBuffer(str);
        //方法二 使用的是append方法
        StringBuffer stringBuffer1 = new StringBuffer();
        stringBuffer1 = stringBuffer1.append(str);

    }
}

2.StringBuffer转成String

public class StringBuffer01 {
    public static void main(String[] args) {
        

        StringBuffer stringBuffer3 = new StringBuffer("hello");
        //方式一
        String s1 = stringBuffer3.toString();
        //方式二 使用构造器
        String s2 = new String(stringBuffer3);
    }
}

5. StringBuffer类的常用方法

1.增append()

public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        s.append(',');//都是在后面加
        s.append("jack");

    }
}

2.删delete(int start , int end)

删除的位置 >= start && < end

public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        s.delete(0,3);
        //删除0-3的位置不包含3 >= start && < end

    }
}

3.改replace(int start , int end , String str)

索引start到end然后替换为str

public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        s.replace(1,2,"22");//索引start到end然后替换为str

    }
}

4.查indexOf(String str)

找到输入的str第一个字符出现的位置

public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        int indexOf = s.indexOf("he");
        //找到输入的str第一个字符出现的位置

    }
}

5.插入insert(int offset , String str)

在索引为offset的位置插入str原来索引为offset的内容自动后移

public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        s.insert(3,"ross");
        //在索引为offset的位置插入str原来索引为offset的内容自动后移

    }
}

三、StringBuilder

1基本介绍

在这里插入图片描述
在这里插入图片描述
方法和StringBuffer一样
没有做互斥的处理 因此在单线程的情况下使用StringBuilder

三大类使用原则

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Milisira

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值