Java中String类、StringBuffer类和StringBuilder类

目录

String类

创建字符串对象:

构造方法:

判断功能:

获取功能:

转换功能:

替换功能:

 StringBuffer

构造方法:

在末尾添加: 

插入:

删除功能:

替换功能:

反转功能:

截取功能:

StringBuilder:

String类StringBuffer类StringBuilder区别


String类

String类代表字符串,由一个个字符组成,jdk8以char[]数组存储,jdk9以byte[]数组存储

创建字符串对象:

String s1 = "abc";//第一种
String s2 = new String("abc");//第二种

两种创建区别:第一种隐式创建,在创建时,会先在常量池中检查是否有相同的字符串,如果有将其地址返回,如果没有将在常量池中创建;第二种用new创建对象,创建新的对象,其地址是独一无二的。

 String s1 = "abc";
 String s2 = new String("abc");
 System.out.println(s1==s2);//false
 String s3 = "abc";
 String s4 = "abc";
 System.out.println(s3==s4);//true

构造方法:


        String():初始化为空
        String(String s):创建与s相同字符串
        String(byte[] b):将byte数组转为字符串
        String(char[] c):将char数组转为字符串
        String(StringBuffer sb):将StringBuffer类转为String类
        String(StringBuilder sb):将StringBuilder类转为String类


判断功能:


        boolean equals(Object obj):重写Object中的方法,判断内容是否相等

String s1 = "abc";
System.out.println(s1.equals("abc"));//true


        boolean equalsIgnoreCase(String str):不区分大小写,判断内容是否相等,用来匹配验证码

String s1 = "Abundant";
System.out.println(s1.equalsIgnoreCase("abundant"));//true


        boolean contains(String str):判断是否包含子串

String s1 = "well-grounded";
System.out.println(s1.contains("grounded"));//true


        boolean isEmpty():判断是否位空

 String s1 = "";
 String s2 = null;
 System.out.println(s1.isEmpty());//true
 System.out.println(s2.isEmpty());//抛出空指针异常NullPointerException


        boolean startsWith(String prefix):判断是否从Prefix开头

String s1 = "reluctant";
System.out.println(s1.startsWith("re"));//true


        boolean endsWith(String suffix):判断是否以suffix结尾

String s1 = "reluctant";
System.out.println(s1.endsWith("ant"));//true


        int    compareTo(String anotherString) 两个字符串之间按照编码大小比较,返回编码差

 String s1 = "12a";
 System.out.println(s1.compareTo("12A"));//32

获取功能:


        int length()   获取长度

String s1 = "12a";
System.out.println(s1.length());//3


        char charAt(int index)  获取指定位置的字符

 String s = "abcef";
 char c = s.charAt(4);//c = f


        int indexOf(String str)  获取指定字符首次出现的位置

String s = "abcef";
int index = s.indexOf("c");//index = 2


        int indexOf(String str,int fromIndex) 从指定的位置开始查找字符首次出现的位置

String s = "abcefc";
int index = s.indexOf("c");
int index1 = s.indexOf("c",index+1);//从指定位置开始找
System.out.println(index1);//5


        String substring(int startIndex)  截取字符串,从指定的位置开始,截取到最后一位

String sub = s.substring(2);//从2开始到最后,sub是新的字符串,原来s没变


        String substring(int startIndex,int endndex) 截取字符串,从指定的位置开始,到指定位置结束(左包含右不包含)

String s = "abcefc";
String sub1 = s.substring(2,5);//cef


转换功能:


        byte[] getBytes()  将字符串转为byte数组

byte[] bytes = "abc".getBytes();//将abc转为byte型数组
System.out.println(Arrays.toString(bytes));//[97, 98, 99]


        char[] toCharArray()  将字符串转为char数组

char[] chars = "bca".toCharArray();//toCharArrat()将字符串转为字符数组
Arrays.sort(chars);//排序
String s6 = new String(chars);//将char数组转为String数
System.out.println(s6);//abc


        static String valueOf(char[] chs) 将char数组转为字符串

char[] c = new char[]{'d','e','p','i','c','t'};
String c1 = String.valueOf(c);
System.out.println(c);//depict


        String toLowerCase()  英文字母转小写

String str = "ConFront".toLowerCase();//confront


        String toUpperCase() 英文字母转大写

  String str = "logo".toUpperCase();//LOGO


        String concat(String str)  连接另一个字符串,返回一个新的字符串

String a = "up";
String a1 = "grade";
System.out.println(a.concat(a1));//upgrade


        Stirng[] split(分割符)  按照指定的规则(正则表达式),将字符串拆分为数组。

String b = "ab:cde:ef:fh";
String[] sar = b.split(":");//根据:(冒号)拆分
System.out.println(Arrays.toString(sar));//[ab, cde, ef, fh]

String e = "ab2cde3ef4fh";
String[] f = e.split("\\d");//以数字进行分隔 ,这里用正则表达式
System.out.println(Arrays.toString(f));//[ab, cde, ef, fh]

替换功能:


        String replace(char old,char new)新字符替换指定的所有的字符

String e = "ab2cde3ef4fh";
System.out.println(e.replace("2","x"));//abxcde3ef4fh
System.out.println(e.replaceAll("\\d","x"));//abxcdexefxfh


        String replace(String old,String new) 新字符串替换指定的所有的子串

String e = "ab2cde3ef4fh";
System.out.println(e.replace("ab","lm"));//lm2cde3ef4fh


        replaceAll(String regex, String replacement)新字符串替换指定的所有的子串,使用正则表达式匹配

String e = "ab2cde3ef4fh";
System.out.println(e.replaceAll("\\d","x"));//abxcdexefxfh


        replaceFirt(String sregex, String replacement) 用新的字符串替换指定的第一个出现的子串,使用正则表达式匹配
        String trim()只能除字符串两端空格
 

String s = " 1 23abc  ";
System.out.println(s.trim());//1 23abc(此处无空格)


 StringBuffer

创建String类对象,不能改变内容,底层char value[] 被final修饰,不可以改变;因此在字符串拼接时,会新创建String类

        String s1 = "abc";
        s1 += "def";//创建新的字符串对象,并将新对象的地址赋值给s1
        s1 += "ghi";//再次创建对象,前一个对象将被垃圾回收
        System.out.println(s1);//abcdefghi

 当需要大量字符串拼接,使用String类每拼接一次都会创建对象,会浪费空间。因此使用StringBuffer  可以改变String字符串,减少空间浪费。

StringBuffer :线程安全的,可变的字符串

构造方法:


        public StringBuffer()初始化为空
        public StringBuffer(String str)初始化为Str

在末尾添加: 


        public StringBuffer append(String str):
        底层char数组初始容量为16,添加时超出char的容量,不会创建新的StringBuffer,而会创建一个新的数组对象赋给value

        StringBuffer s = new StringBuffer("abcd");//4+16=20
        s.append("efghij");//在末尾添加,不会创建新的Stringbuffer对象和底层的数组对象
        s.append("klmnopq");//在末尾添加
        s.append("rstuvw");//在末尾添加
        //超出char的容量,不会创建新的StringBuffer,而会创建一个新的数组对象赋给value
        System.out.println(s);//abcdefghijklmnopqrstuvw


插入:


        public StringBuffer insert(int offset,String str):从第offset位置插入str字符串

        StringBuffer str = new StringBuffer("visible");
        str.insert(0, "in");//从第0位插入字符串
        System.out.println(str);//invisible


删除功能:


        public StringBuffer deleteCharAt(int index):指定位置删除的字符

        str.deleteCharAt(1);//移除此序列指定位置的 char。
        System.out.println(str);//ivisible


        public StringBuffer delete(int start,int end):删除指定区间位置的字符串(左包含,右不包含)

//str = invisible
str.delete(0,2);//删除指定区间的字符串
System.out.println(str);//visible


替换功能:


        public StringBuffer replace(int start,int end,String str):用str替换start到end-1位置的字符串

        StringBuffer str1 = new StringBuffer("possess");
        str1.replace(1, 6, "roof");
        System.out.println(str1);//proofs


反转功能:


        public StringBuffer reverse():翻转字符串

str1.reverse();//proofs --> sfoorp


截取功能:

会创建一个新的对象,截取时返回新的字符串
        public String substring(int start):从start到末尾截取

System.out.println(str1.substring(1));//sfoorp -->foorp


        public String substring(int start,int end):从start到end截取

System.out.println(str1.substring(2,4));//foorp --> oo

StringBuilder:


    与StringBuffer方法功能相同,只是方法没有加synchronized,多线程不安全的


String类StringBuffer类StringBuilder区别

  • String:字符常量,适用于少量的字符串拼接
  • StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
  •  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小俱的一步步

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

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

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

打赏作者

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

抵扣说明:

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

余额充值