String StringBuffer StringBuilder
String概述
String
类代表字符串。Java程序中的所有字符串字面值(如"abc"
)都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String对象是不可变的,所以可以共享
*String s1 = “abc”; //s1是类类型变量,”abc”是一个对象
字符串的最大特点是:一旦初始化就不可以被改变
*String s1 = “abc”; String s2 = new String(“abc”);
s1和s2有什么区别:
s1在内存中有一个对象,s2在内存中有两个对象
*String类复写了Object类中的equals()方法,该方法用于判断两个字符串的内容是
否相同
String常见功能-获取&判断
-
获取:
字符串中所包含的字符数,即字符串长度
int length() :获取长度
根据位置该位置上的字符
char charAt(intindex) :
根据字符获取该字符在字符串中的位置(其中若字符串中未出现该字符或字符串则以下方法都会返回-1)
int indexOf(intch) :返回ch在字符串中第一次出现的位置
int indexOf(intch,int fromIndex) :返回从fromIndex位置开始,ch在字符串中的第一次出现位置
intindexOf(String str) :返回str在字符串中第一次出现的位置
intindexOf(String str,int fronmIndex) :返回从fromIndex位置开始,str在字符串中第一次出现的位置
-
判断:
字符串中是否包含某个子串
boolean contains(String str)
* indexOf(String str) 可以查找str在字符串中第一次弧线的位置,如果返
回值为-1,则表示字符串中没有str,所以也可以用于对判断字符串中
是否包含子串
而且可用if(s.indexOf(str)!=-1)进行判断,也可以返回位置
字符串知否有内容
boolean isEmpty() :判断字符串长度是否为0
字符串是否以指定内容开头
boolean startsWith(String str)
字符串是否以指定内容结尾
boolean endsWith(String str)
判断字符串内容是否相同
boolean equals()
判断字符串内容知否相同,并忽略大小写
boolean equalsIgnoreCase()
-
转换:
将字符数组转换成字符串
构造方法:String(char[] value)
String(char[] value,int offset,int count):将字符数组中的一部分
转换成字符串,offset为偏移位,count为长度
静态方法:static String copyValueOf(char[] data)
static String copyValueOf(char[] data,intoffset,int count)
static String valueOf(char[] data)
将字符串转换成字符数组
toCharArray();
将字节数组转换成字符串
String(byte[] bytes)
String(byte[] bytes,int offset,intcount)
将字符串转换成字节数组
getBytes()
将基本数据类型数据转换成字符串
static String valueOf(基本数据类型变量名)
注意:字符串和字符数组在转换过程中,是可以指定编码标的
-
替换:
replace(charoldChar,char newChar)
返回一个新字符串,用newChar替换原字符串中出现的oldChar
replace(CharSequencetarget,CharSequence replacement)
使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串
注意:如果原字符串中没有要替换的数据,则返回的还是原字符串
-
切割
String[]split(String regex)
例如: String s = “zhangsan,lisi,wangwu”;
String[] a = s.split(“,”);
得到结果是:
a = {“zhangsan”,”lisi”,”wangwu”};
-
子串 获取字符串中的一部分
substring(intbeginIndex)
从指定位置位置开始到结尾
substring(intbeginIndex,int endIndex)
从指定位置开始到指定位置结束,包含头,不包含尾
-
转换,去除空格,比较
将字符串全部转换成大写或全部转换成小写
toUpperCase() :将字符串全部转换成大写
toLowerCase() :将字符串全部转换成小写
将字符串两端的空格去除
trim();
对两个字符串进行自然顺序的比较
compareTo(String anotherString)
如果参数字符串等于此字符串,则返回值
0
;如果此字符串按字典顺序小于字符串参数,则返回一个小于
0
的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于
0
的值。compareToIgnoreCase(String str)
不考虑字符串大小写进行比较
根据指定 String大于、等于还是小于此 String(不考虑大小写),分别返
回一个负整数、0或一个正整数。
StringBuffer
StringBuffer线程安全的可变字符序列。字符串缓冲区,是一个容器,不可修改,
不能被继承
特点:
-
长度是可变的
-
可以直接操作多种数据类型
-
最终通过toString()方法转换成字符串
StringBuffer上的操作
存储:
StringBuffer
上的主要操作是append
和insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转
换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。
append
方法始终将这些字符添加到缓冲区的末端;而insert
方法则在指定的点添加字符。
删除:
StringBuffer delete(int start,intend) 删除指定位置上的数据,包含start
下标上的元素,不包含end下标上的元素
清空该缓冲区缓冲区对象.delete(0,缓冲区对象.length())
StringBuffer deleteCharAt(intindex) 删除指定位置上的字符
该方法等价于 StringBuffer delete(int index,int index+1)
获取:
char charAt(int index) 返回缓冲区中指定位置上的字符
int indexOf(String str) 返回字符串在该缓冲区中第一次出现的位置
int indexOf(String str,intfromIndex)
返回字符串在该缓冲区中指定位置开始第一次出现的位置
int lastIndexOf(String str)返回字符串在该缓冲区中最后一次出现的位置
int lastIndexOf(String str,intfromIndex)
返回字符串在该缓冲区中指定位置开始最后一次出现的位置
int length() 返回该缓冲区长度
String substring(int start)返回该缓冲区中从指定位置开始到结尾的子串
String substring(int start,intend)
返回该缓冲区中从start(包含)开始,到end(不包含)结束的子串
修改:
StringBuffer replace(int start,intend,String str)
把该缓冲区中从start(包含)到end(不包含)之间的元素替换为str
void setCharAt(int index,char ch)
把该缓冲区中下标为index的元素替换为ch
反转:
StringBuffer reverse()
获得字符数组:
void getChars(int srcBegin,intsrcEnd,char[] dst,int dstBegin)
将该缓冲区中从srcBegin(包含)到srcEnd(不包含)之间的数据赋值给
字符数组dst,从下标dstBegin开始存放
StringBuilder JDK 1.5之后才出现
一个可变的字符序列。此类提供一个与
StringBuffer
兼容的 API,但不保证同步。该类被设计用作
StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多
数实现中,它比
StringBuffer
要快。而当将StringBuilder
的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用
StringBuffer
。StringBuilder类中的方法和StringBuffer类中的方法是一样的。在开放中,建议使
用StringBuilder。
JDK升级的原因:
-
提高效率
-
简化书写
-
提高安全性