String 、CharSequence、StringBuffer和StringBuilder概述
String 是java中的字符串,他实现了CharSequence接口,代码如下
public final class String implements java.io.Serializable,Comparable, CharSequence
CharSequence是一个接口,包括length(), charAt(int index),subSequence(int start, int end),toString()这几个常用的API接口。除了String实现了CharSequence之外,StringBuffer和StringBuilder也实现了CharSequence接口。
StringBuffer和StringBuilder都是可变的字符序列。它们都继承于AbstractStringBuilder,实现了CharSequence接口。他们之间的关系如下图所示:
String、StringBuffer和StringBuilder的比较
String出生于JDK1.0时代,其值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间。
StringBuffer出生于JDK1.0时代,他是可变类,也是线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 。
StringBuilder出生于JDK1.5时代,功能与StringBuffer相同,但是他是非线程安全的。
三者在执行速度方面的比较:
StringBuilder> StringBuffer > String
三者使用的总结:
1.如果要操作少量的数据用= String
2.单线程操作字符串缓冲区下操作大量数据=StringBuilder
3.多线程操作字符串缓冲区下操作大量数据=StringBuffer
三者API的总结:
String类提供的api实现的功能最多,而StringBuffer和StringBuilder 主要操作是append 和 insert 方法,通过重载这些方法,来实现接受任意类型数据的需求。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;insert 方法则在指定的点添加字符。
String类的常用方法
1、length() 字符串的长度
例:char chars[]={'a','b','c'};
String s=new String(chars);
int len=s.length();
2、charAt() 截取一个字符
例:char
ch;
ch="abc".charAt(1);返回'b'
3、getChars() 截取多个字符
void getChars(int sourceStart,int sourceEnd,char target[],int
targetStart)
sourceStart指定了子串开始字符的下标,sourceEnd指定了子串结束后的下一个字符的下标。因此,子串包含从sourceStart到sourceEnd-1的字符。接收字符的数组由target指定,target中开始复制子串的下标值是targetStart。
例:String
s="this is a demo of the getChars method.";
char buf[]=new char[20];
s.getChars(10,14,buf,0);
4、getBytes() 替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes()。
5、toCharArray()
6、equals()和equalsIgnoreCase() 比较两个字符串
7、regionMatches() 用于比较一个字符串中特定区域与另一特定区域,它有一个重载的形式允许在比较中忽略大小写。
boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)
boolean regionMatches(boolean ignoreCase,int startIndex,String str2,int str2StartIndex,int numChars)
8、startsWith()和endsWith()startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束
9、equals()和==
equals()方法比较字符串对象中的字符,==运算符比较两个对象是否引用同一实例。 例:String
s1="Hello";
String
s2=new String(s1);
s1.eauals(s2);//true
s1==s2;//false
10、compareTo()和compareToIgnoreCase() 比较字符串
11、indexOf()和lastIndexOf()
indexOf() 查找字符或者子串第一次出现的地方。
lastIndexOf() 查找字符或者子串最后一次出现的地方。
12、substring(),它有两种形式
第一种是:String substring(int startIndex)
第二种是:String substring(int startIndex,int endIndex)
13、concat() 连接两个字符串
注意:“ +”可以将字符串与非字符串(比如数字),拼接在一起,成为字符串。
14 、replace() 替换 ,它有两种形式,
第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:
String replace(char
original,char replacement)
例如:String
s="Hello".replace('l','w');
第二种形式是用一个字符序列替换另一个字符序列,形式如下:
String replace(CharSequence
original,CharSequence replacement)
15、trim() 去掉起始和结尾的空格
16、valueOf() 转换为字符串
17、toLowerCase() 转换为小写
18、toUpperCase() 转换为大写
网友评论