字符串相关的处理类
目录导读
String
StringBuffer(线程安全) 1.0出现
StringBuilder(线程不安全) 1.5出现
数组与StringBuffer/StringBuilder的区别
1.String 类
是不可变类,即一旦一个String对象被创建之后,该对象中的字符序列就不可被改变,直至该对象被销毁
适合用于数据共享的场合
(1)构造器
public String();
public String(byte[] bytes);
public String(byte[] bytes, int index, int length);
public String(char[] chs);
public String(char[] chs, int index, int length);
public String(String original); //String s = new String("hello");
public String(StringBuffer buffer);
public String(StringBuilder builder);
(2)判断功能
1.是否相等
public boolean equals(Object obj); //比较内容,区分大小写,因为String重写了equals方法
public boolean equalsIgnoreCase(String s); //不区分大小
2.是否包含
public boolean contains(String s); //是否包含
3.是否是特定开头
boolean startsWith(String prefix); //是否以prefix开头
boolean startsWith(String prefix, int toffset); //从toffset后开始是否以prefix开头
4.是否是特定结尾
boolean endsWith(String str); //是否以str结尾
5.叛空
boolean isEmpty(); //是否为空
(3)获取功能
1.长度
public int length();
2.特定位置的字符
public char charAt(int index); //获取index 处的字符
3.特定字符首次出现的位置
public int indexOf(int ch); //返回特定字符(这里用其ASCII值做参数)在该字符串中第一次出现的位置
注意:这里把参数类型限制为int而不是char类型,是为了防止发生强制类型转换造成精度损失
public int indexOf(int ch, int fromIndex);
public int indexOf(String str); //返回字符串在此字符中第一次出现的位置
public int indexOf(String str, int fromIndex) ;
4.截取功能
public String substring(int start); //从start处开始截取至末尾。包含start
public String substring(int start, int end); //截取该范围内的[start, end)字符串
(4)转换功能
1.类型转换
public char[] toCharArray(); //String ——> char[]
public static String valueOf(X x); //是static方法,将任意类型转换为String, 任意类型包括基本类型和对象类型
public byte[] getBytes(); //String ——> byte[]
public void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin); //部分转换
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin); //部分转换
2.大小写转换
public String toLowerCase(); //转小写
public String toUpperCase(); //转大写
3.拼接
public String concat(String str); //拼接字符串
(5)替换功能
public String replace(char old, char newChar); //针对字符
public String replace(String old, String newString); //针对字符串
(6)去掉字符串两端的空格
public String trim(); //只能去掉两端处的空格,之间位置的不行
注意:由于String是不可变类,所以很容易产生一些额外的临时变量,消耗过多的内存
资源,因此,使用StringBuffer、StringBuilder就可以避免这个问题
2.StringBuffer / StringBuilder 类
这两个对象代表一个字符串序列可变。
适合用于数据内容被频繁修改的场合
区别在于 StringBuffer 是线程安全的,因此效率不高
StringBuilder 是线程不安全的,因此效率较高,故一般用StringBuilder
二者的方法用法基本一样,只介绍StringBuffer,另一种类推
(1)构造器
public StringBuffer(); //默认出事容量,16个字符,第一次扩容(+18),第二次以后扩容 +1
public StringBuffer(int capacity); //指定容量capacity,第一次扩容(capacity+2),第二次以后扩容 +1
public StringBuffer(String str); //指定内容的StringBuffer
(2)反转功能
public StringBuffer reverse(); //将字符串倒序
(3)获取功能
1.长度
public int capacity(); //返回当前容量,理论值为16(默认情况下)
public int length(); //返回实际长度
2.截取功能
public String substring(int start); //从start处截取值末尾,存储在新的String中
public String substring(int start, int end); //截取[start, end)间的字符,存储在新的String中
注意:这两个方法执行后,原来的StrignBuffer里的内容并没有发生任何变化
(4)添加功能
public StringBuffer append(X x); //追加x在原始字符串后(即在原缓冲区对象里修改)
注:X可以为任何类型的数据,甚至可以是Obejct类的对象
public StringBuffer insert(int offset, String str); //在offset处插入数据
(5)删除功能
public StringBuffer deletCharAt(int index); //删除指定位置的字符
public StringBuffer delete(int start, int end); //删除[start, end)位置的字符
(6)替换功能
public StringBuffer replace(int start, int end, String str); //str替换[start, end)处的字符
(7)转换
1.StringBuffer -> String
public String toString();
2.String -> StringBuffer
public StringBuffer(String str); //指定内容的StringBuffer
3.数组与StringBuffer/StringBuilder的区别
(1)二者均为容器,用来存放数据
(2)StringBuffer/StringBuilder的数据最终是一个字符串数据(里面可以存放多种不同类型的数据)
每一个具体的数组中只能存放一种类型的数据
(3)数组的长度是固定不变的,StringBuffer/StringBuilder的长度可变
注意:数组在Java中是一种对象(因为Java中的数组拥有自己的属性,如length,还有方法如clone()等),但在C/C++中数组名只是一个指针,没有属性和方法