String
代表的是字符串
特点
- 凡是带双引号的都是String对象
- 字符串是常量,他们的值在创建之后就不能被改变
- String对象是不可变的,所以可以共享
创建
String();
String(String s);
String(chat [] char);
String(byte[] byte);
String(char[] chars,int offset,int count);
将char数组从offset索引开始,将count个数组元素转为字符串String(byte[] byte,int offset,int count);
方法
判断方法
boolean equals(Object)
判断字符串内容是否一样boolean equalsIgnoreCase(String s)
判断字符串内容是否一样,忽略大小写
获取方法
int length()
获取字符串长度String concat(String s)
拼接字符串,返回新串char charAt(int index)
根据索引获取对应的字符int indexOf(String s)
获取指定字符在字符串中第一次出现的索引位置String subString(int beginIndex)
从beginIndex开始截取字符串到最后String subString(int beginIndex,int endIndex)
beginIndex开始到endIndex截取字符串,含头不含尾
转换方法
char[] toCharArray()
将字符串转换为char数组byte [] getBytes()
将字符串转换为byte数组byte[] getBytes(String charsetName)
按照指定的编码格式将字符串转换为byte数组String replace(c1,c2)
将c1替换成c2
分割方法
String[] split(String regex)
按照指定规则分割字符串
1.String[] split(String regex)->按照指定的规则分割字符串
注意:regex写的是正则表达式 -> . 在正则表达式中代表任意一个字符
public class Demo08String {
public static void main(String[] args) {
String s = "abc,txt";
String[] split = s.split(",");
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}
System.out.println("===============");
String s2 = "haha.hehe";
//String[] split1 = s2.split(".");任意字符不能分割。切不出来 需要转意。
String[] split1 = s2.split("\\.");
for (int i = 0; i < split1.length; i++) {
System.out.println(split1[i]);
}
}
}
其他方法
boolean contains(String s)
判断老串儿中是否包含指定的串儿boolean endsWith(String s)
判断老串儿是否以指定的串儿结尾boolean startsWith(String s)
判断老串儿是否以指定的串儿开头String toLowerCase()
将字母转成小写String toUpperCase()
将字母转成大写String trim()
去掉字符串两端空格
StringBuilder
可变的字符序列,底层数组没有被final修饰
特点
自带缓冲区,拼接字符串不会随意产生新对象
1.概述:一个可变的字符序列,此类提供了一个与StringBuffer兼容的一套API,但是不保证同步(线程不安全,效率高)
StringBuilder与StringBuffer除了对象不一样剩下都一样
2.作用:主要是字符串拼接
3.问题:
a.刚讲完String,String也能做字符串拼接,直接用+即可,但是为啥还要用StringBuilder去拼接呢?
b.原因:
String每拼接一次,就会产生新的字符串对象,就会在堆内存中开辟新的空间,如果拼接次数多了,会占用内存,效率比较底
StringBuilder,底层自带一个缓冲区(没有被final修饰的byte数组)拼接字符串之后都会在此缓冲区中保存,在拼接的过程中,不会随意产生新对象,节省内存
4.StringBuilder的特点:
a.底层自带缓冲区,此缓冲区是没有被final修饰的byte数组,默认长度为16
b.如果超出了数组长度,数组会自动扩容
创建一个新长度的新数组,将老数组的元素复制到新数组中,然后将新数组的地址值重新赋值给老数组
c.默认每次扩容老数组的2倍+2
如果一次性添加的数据超出了默认的扩容数组长度(2倍+2),比如存了36个字符,超出了第一次扩容的34,就按照实际数据个数为准,就是以36扩容
常用方法(返回类型 方法())
StringBuilder append(任意类型)
字符串拼接,返回自己StringBuilder reverse()
反转字符串,返回自己String toString()
将StringBuilder转成String
String:拼接字符串效率低,每拼接一次,都会产生一个新的字符串对象,耗费内存资源
StringBuilder和StringBuffer区别:
a.相同点:用法一样,作用一样
b.不同点:StringBuilder:拼接效率比StringBuffer高,线程不安全
StringBuffer:效率比较底,线程安全
拼接效率:StringBuilder>StringBuffer>String