String
概述
- String就是字符串类型,属于java.lang包,使用时不需要导包。
- 所有的字符串常量(“HelloWorld”、”abc”)都是属于String类型的对象
- 字符串字面值属于常量,存储在方法区的常量池中。
- String类型是一个常量,在创建之后就无法更改(是一个不可变的字符序列)
- 不可变的原因是String类型只提供了构造方法,没有提供set方法,因此只能在创建对象的时候,初始化成员变量,将来对象创建完成之后,无法通过方法来修改。
String类型的判断功能
1. equals(Object obj):判断调用者和参数对象描述的字符串内容是否相同
2. equalsIgnoreCase(String str):忽略大小写判断两个字符串的内容是否相同。
3. Contains(String str):判断调用者是否包含了str这个字符串
4. startsWith(String prefix):判断调用者是否以prefix开头
5. endsWith(String suffix):判断调用者是否以suffix结尾
6. isEmpty():判断调用者是否是空串
String类型的获取功能
1. length():获取字符串字符的个数
2. charAt(int index):返回调用者字符串中索引为index的字符(和length方法结合之后可以遍历字符串)
3. subString(int beginIndex):获取一个字符串,内容是从当前字符串的beginIndex索引开始
4. subString(int beginIndex,int endIndex):获取一个指定范围索引的字符串
注意事项:
包含头不包含尾,返回的结果中,不包含endIndex索引上的字符
所有方法都无法修改字符串的对象本身,一般都是返回一个新的字符串对象。
5. IndexOf(char ch):返回ch字符在当前调用字符串中,第一次出现的位置。
6. lastIndex(char ch):返回ch字符在当前调用字符串中,最后一次出现的位置
String的转换功能
1. byte[] getBytes():将当前字符串,转换成字节数组
2. Char[] toCharArray():将当前的字符串,转换成字符数组
3. toUpperCase():将当前的字符串,转成全大写形式
4. toLowerCase():将当前的字符串转换成小写形式
5. Concat(String str):将当前调用者和参数str进行拼接,返回拼接后的字符串(不常用,因为更多的是使用运算符加号)
6. valueOf(Object obj):可以将任意数据类型的数据,转换成字符串
注意:参数不能为null 否则会报一个空指针异常
String类型的替换功能
1. replace(String oldstr,String newStr):将调用者中的老串替换成新串
2. trim():去掉字符串左右两边的空格,中间的空格还是存在
StringBuilder
概述
1. StringBuilder是一个可变的字符序列,因为在类中提供了修改私有成员变量的方法。
常用的方法是append和insert,就是在StringBuilder对象本身上,进行修改。
2. StringBuilder底层和String一样,也是维护了一个字符数组。
数组是私有的,外界无法直接访问,因此在StringBuilder或者String中对数组进行操作的共有方法进行封装。
3. String和StringBuilder的关系:都是用于描述字符串
(1) String是不可变的字符序列
(2) StringBuilder是可变变的字符序列因为提供了修改成员变量的方法
(3) String本身长度也不可以变化,StringBuilder长度可以变化。可以认为StringBuilder就像一个可以伸缩的容器,用于存储咱们的字符。
构造方法
1. 构造方法:创建当前对象、将其他类型的数据,转换成当前类型
2. StringBuilder的构造方法
(1) StringBuilder():创建一个生成器,初始化容量为16个字符
(2) StringBuilder(int capacity):创建一个生成器,初始化容量为capacity大小
(3) StringBuilder(String str):创建一个生成器,初始化值为str这些字符,初始化容量str + 16
3. 获取容积的大小
(1) capacity():获取当前生成器的容器大小
4. 获取该容器的字符个数
(1) length():获取当前容器的字符个数
StringBuilder添加功能
append(任意类型):可以将任意数据类型,转成字符,添加到生成器中。
1. insert(int index,任意数据类型):可以将任意数据类型,添加到指定的位置。
(1) 说明
① index的范围0~当前缓冲区的字符串大小
② 插入数据之后,数据本身的索引就是参数中指定的index
删除功能
1. deleteCharAt(int index):删除指定索引的字符
2. delete(int start,int end):删除制定范围的字符,被删除的部分包含头不包含尾
替换和反转
1. replace(int start,int end,String str):将字符串缓冲区中从start开始到end-1这部分内容,替换成str
2. reverse():将原有的字符序列进行反转。
String和StringBuilder拼接字符串的区别
1. 使用String类型拼接字符串:时间和空间上都非常浪费,浪费的程度和数组的规模有关。
2. StringBuilder类型拼接字符串:时间和空间上都非常的节省,无论循环多少次,都创建一个对象。
3. String拼接字符串的步骤
(1) 创建一个StringBuilder的存储空间,大小为第一个字符串的长度+16(创建第一个对象)
(2) 将第一个字符串添加到缓冲区当中
(3) 将第二个字符串添加到缓冲区当中
(4) 将缓冲区对象转换成字符串对象(创建的第二个对象)
(5) 返回字符串
4. StringBuilder拼接字符串的步骤l
(1) 创建一个新的StringBuilder存储空间
(2) 在StringBuilder的基础上进行添加,不创建新的字符串对象。
(3) 返回结果。
5. 总结
(1) String对象拼接字符串效率比较低,StringBuilder拼接效率比较高。
String和StringBuilder的相互转换
1. String转换为StringBuilder
(1) Append()方法
(2) StringBuilder()的构造方法
2. StringBuilder转String
(1) toString()方法
(2) 使用String的构造方法
StringBuffer和StringBuilder的区别
1. 共同点
(1) 都是字符串的缓冲区,都是字符串的生成器,都是可变的字符序列
2. 不同点
(1) 出现的版本不同
① StringBuffer在jdk1.0出现的
② StringBuilder在jdk1.5出现的
(2) 线程安全不同
① StringBuffer是线程安全的,在多线程的环境下仍然保证数据安全
② StringBuilder是线程不安全的,在多线程环境下无法保证数据安全。
(3) 效率
① StringBuffer效率比较低
② StringBuilder效率比较高
后加:
StringBuffer和StringBuilder的区别
- 共同点
- 都是字符串的缓冲区,都是字符串的生成器,都是可变的字符序列
- 不同点
- 出现的版本不同
- StringBuffer在jdk1.0出现的
- StringBuilder在jdk1.5出现的
- 线程安全不同
- StringBuffer是线程安全的,在多线程的环境下仍然保证数据安全
- StringBuilder是线程不安全的,在多线程环境下无法保证数据安全。
- 效率
- StringBuffer效率比较低
- StringBuilder效率比较高
- 出现的版本不同