Java中关于字符串的基本操作
- 一、String
- 1 String的两种实例化方式
-
- 2. String类的细节阐述
- 3. String的常用操作
- 3.1 字符串的长度
- 3.2 得到索引处的字符
- 3.3 判断是否为空
- 3.4 比较字符串内容
- 3.5 获取字符串的子串
- 3.6 切分字符串为数组
- 二、StringBuffer
- 1. StringBuffer的实例化方式
- 2. 细节阐述
- 3. 常用操作
- 3.1 增加
- 3.2 删除
- 3.3 修改
- 3.4 查询
- 3.5 插入
- 3.6 长度
- 3.7 反转
- 三、StringBuilder
一、String
1 String的两种实例化方式
1.1 字面量定义
String s = "javaEE";
- 通过字面量定义的方式所声明的字符串,都会定义在方法区中的字符串常量池中,变量s直接保存常量池中字符串常量的地址值。
1.2 通过new + 构造器
String s = new String("javaEE");
- 通过new + 构造器方式所声明的字符串,会在堆和常量池中都创建对象,变量s中保存堆中变量的地址值,堆中的变量保存常量池中字符串常量的地址值。
2. String类的细节阐述
- String声明为final的,不可被继承。
- String实现了Serializable接口,表示字符串是支持序列化的;实现了Compareable接口,表示String可以比较大小。
- String内部定义了final char[] value用于存储字符串数据
- String代表不可变的字符序列,简称:不可变性
- 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
- 当对现有的字符串进行连接操作时,也需要重写指定内存区域赋值,不能使用原有的value进行赋值。
- 当调用String的replace()方法修改指定字符或字符串时,也需要重写指定内存区域赋值,不能使用原有的value进行赋值。
- 字符串的拼接
- 常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量。
- 只要有其中一个是变量,结果就在堆中。
- 如果拼接的结果调用intern()方法,返回值就在常量池中。
3. String的常用操作
3.1 字符串的长度
int length()//返回字符串的长度,返回值为int类型
3.2 得到索引处的字符
char charAt(int index);返回字符串索引处的字符,返回值为char类型
3.3 判断是否为空
boolean isEmpty();//返回字符串是否为空字符串,底层判断value数组元素个数是否为0
3.4 比较字符串内容
boolean equals(Object obj);//比较两个字符串内容是否相同
3.5 获取字符串的子串
String substring(int beginIndex, int endIndex);
//返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串
3.6 切分字符串为数组
String[] split(String regex);返回一个数组,根据给定正则表达式的匹配拆分此字符串。
二、StringBuffer
1. StringBuffer的实例化方式
StringBuffer stringBuffer = new StringBuffer("javaEE");
2. 细节阐述
- StringBuffer:可变字符序列;线程安全的的,效率低;底层用char[]存储
3. 常用操作
3.1 增加
append(xxx);//在字符串尾部增加元素
3.2 删除
delete(int start, int end);//删除索引从start到end的元素,不包含end
3.3 修改
setCharAt(int n , char ch)/replace(int start, int end, String str)
3.4 查询
charAt(int n)
3.5 插入
insert(int offset, xxx)//在offset索引处,插入xxx
3.6 长度
int length()
3.7 反转
StringBuffer.reverse();
三、StringBuilder
- StringBuilder的操作方法和StringBuffer一样,两者唯一的区别就是,StringBuffer是线程不安全的,效率高。