String类与StringBuffer类 正则表达式
1、String类和StringBuffer类的区别 数组
String类是不可变类,新建的对象为不可变对象(String类的内容和长度是固定的),一旦被建立就不能修改它的值(对于已经存在的String对象的修改都是从新建立一个新的对象,而后把新的值保存进去); String类是final类型不可被继承。 安全
StringBuffer类是可变类,新建的对象是一个可变的对象,当须要修改其内容的时候,不须要再建立新的字符串对象,而是直接操做原来的串;不能经过赋值符号对他进行赋值(只能经过构造函数来创建, StringBuffer sb = new StringBuffer(),每一个StringBuffer对象都有必定的缓冲区容量,当字符串大小超过容量时,会自动增长容量);字符串链接操做中StringBuffer的效率要比String高。 多线程
另外因为StringBuffer是线程安全的,因此在多线程程序中也能够很方便的进行使用,可是程序的执行效率相对来讲就要稍微慢一些。从JDK5开始,为该类补充了一个单个线程使用的等价类,即StringBuilder。与该类相比,一般应该优先使用StringBuilder类,由于它支持全部相同的操做,但因为它不支持同步,因此速度更快。 app
String 做为参数传递是相似于基本数据类型做为参数传递(值传递),StringBuffer 做为参数传递就是引用数据类型传递。 函数
总结一下: 测试
相同点: ui
(1)String类与StringBuffer类都用来处理字符串。 编码
(2)部分方法在两者中的用法是相同的。 spa
(3)在这两个类中,字符的索引都是从0开始的。
(4)这两个类都是CharSequence的子类。CharSequence接口描述的是一系列字符集。
不一样点:
(1)String类是不可变类,由于在底端是用字符数组实现的,而数组长度固定,一旦赋值,就不能在原来的字符串上进行修改可能会浪费空间。StringBuffer类是可变类,可以在原来的数组上进行修改。
(2)String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖该方法。比较StringBuffer字符串内容是否相等,可使用toString() 方法将StringBuffer的内容转换为String 字符串,再使用equals()方法比较。
(3)虽然两个类都覆盖了toString()方法,但各自的实现方式不一样。String类的toString()方法返回当前String对象的引用。而StringBuffer类的toString()方法返回一个以当前StringBuffer的缓冲区的全部字符为内容的新的String对象的引用。
(4)String类对象能够用操做符"+"进行链接,而StringBuffer类的对象经过append()方法添加新的字符串。
2、StringBuffer对象和String对象之间的互转
String s = "abc"; StringBuffer sb1 = new StringBuffer("123"); StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer String s1 = sb1.toString(); //StringBuffer转换为String |
3、StringBuffer类
1.StringBuffer的构造方法
public StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
public StringBuffer(int capacity):指定容量大小
public StringBuffer(String str):构造一个字符串缓冲区:里面的容量(字符串内容英文)大小:字符串长度+16初始容量
使用append()方法在字符串后面追加东西的时候,若是长度超过了该字符串存储空间大小了就自动进行扩容:构建新的存储空间更大的字符串,将旧的复制过去;
在进行字符串append添加的时候,会先计算添加后字符串大小,传入一个方法:ensureCapacityInternal 这个方法进行是否扩容的判断,须要扩容就调用expandCapacity方法进行扩容:尝试将新容量扩为大小变成2倍+2 ,判断一下 容量若是不够,直接扩充到须要的容量大小。
2.StringBuffer获取功能
public int capacity():初始容量
public synchronized int length():返回字符串长度
3.StringBuffer的添加功能
StringBuffer append(xxx x):将指定的内容追加(末尾追加)到字符串缓冲区中,返回StringBuffer自己
public StringBuffer insert(int index,xxx x):在指定位置处,插入一个新的内容,返回StringBuffer自己
void setLength(int newLength) 从新设置字符串缓冲区中字符串的长度,若是newLength小于当前的字符串长度,将截去多余的字符。
public void ensureCapacity (int minimumCapacity) 从新设置字符号串缓冲区的总空间。若是minimumCapacity大于当前的总空间,则新的空间被设置:一种结果是minimumCapacity;另外一种结果是{"老空间"乘2加2}。
4.StringBuffer的删除功能
StringBuffer deleteCharAt(int index) :删除指定位置出的字符,返回字符串缓冲区自己
StringBuffer delete(int start, int end) :删除从指定位置开始到指定位置结束,返回值字符串缓冲区自己
public void trimToSize()将StringBuffer对象的中存储空间缩小到和字符串长度同样的长度,减小空间的浪费。
5.StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str):从指定位置开始到指定位置结束,用给定的str字符串替换指定的字符内容
public void setCharAt(int index, char ch):修改对象中索引值为index位置的字符为新的字符ch
6.StringBuffer的反转功能
public StringBuffer reverse () 反转功能
7.StringBuffer的截取功能
String substring(int start) :从指定位置默认截取到末尾,返回一个新的字符串
String substring(int start,int end):从指定位置开始截取到指定位置结束
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 从当前StringBuffer对象的索引号srcBegin开始,到srcEnd结束的子串,赋值到字符数组dst中,而且从dst的索引号dstBegin开始。
8. StringBuffer查找功能
int indexOf(String str) 返回当前StringBuffer对象中,第一个知足str子串的位置。
int indexOf(String str, int fromIndex) 从当前StringBuffer对象的fromIndex开始查找,返回第一个知足str子串的位置。
int lastIndexOf(String str) 返回当前StringBuffer对象中,最后一个知足str子串的位置。
int lastIndexOf(String str, int fromIndex) 从当前StringBuffer对象的fromIndex开始查找,返回最后一个知足str子串的位置。
4、String类方法(分类参考)
方法摘要 |
|
char |
charAt(int index) |
int |
codePointAt(int index) |
int |
codePointBefore(int index) |
int |
codePointCount(int beginIndex, int endIndex) |
int |
compareTo(String anotherString) |
int |
compareToIgnoreCase(String str) |
String |
concat(String str) |
boolean |
contains(CharSequence s) |
boolean |
contentEquals(CharSequence cs) |
boolean |
contentEquals(StringBuffer sb) |
static String |
copyValueOf(char[] data) |
static String |
copyValueOf(char[] data, int offset, int count) |
boolean |
endsWith(String suffix) |
boolean |
equals(Object anObject) |
boolean |
equalsIgnoreCase(String anotherString) |
static String |
format(Locale l, String format, Object... args) |
static String |
format(String format, Object... args) |
byte[] |
getBytes() |
byte[] |
getBytes(Charset charset) |
void |
getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) |
byte[] |
getBytes(String charsetName) |
void |
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) |
int |
hashCode() |
int |
indexOf(int ch) |
int |
indexOf(int ch, int fromIndex) |
int |
indexOf(String str) |
int |
indexOf(String str, int fromIndex) |
String |
intern() |
boolean |
isEmpty() |
int |
lastIndexOf(int ch) |
int |
lastIndexOf(int ch, int fromIndex) |
int |
lastIndexOf(String str) |
int |
lastIndexOf(String str, int fromIndex) |
int |
length() |
boolean |
matches(String regex) |
int |
offsetByCodePoints(int index, int codePointOffset) |
boolean |
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) |
boolean |
regionMatches(int toffset, String other, int ooffset, int len) |
String |
replace(char oldChar, char newChar) |
String |
replace(CharSequence target, CharSequence replacement) |
String |
replaceAll(String regex, String replacement) |
String |
replaceFirst(String regex, String replacement) |
String[] |
split(String regex) |
String[] |
split(String regex, int limit) |
boolean |
startsWith(String prefix) |
boolean |
startsWith(String prefix, int toffset) |
CharSequence |
subSequence(int beginIndex, int endIndex) |
String |
substring(int beginIndex) |
String |
substring(int beginIndex, int endIndex) |
char[] |
toCharArray() |
String |
toLowerCase() |
String |
toLowerCase(Locale locale) |
String |
toString() |
String |
toUpperCase() |
String |
toUpperCase(Locale locale) |
String |
trim() |
static String |
valueOf(boolean b) |
static String |
valueOf(char c) |
static String |
valueOf(char[] data) |
static String |
valueOf(char[] data, int offset, int count) |
static String |
valueOf(double d) |
static String |
valueOf(float f) |
static String |
valueOf(int i) |
static String |
valueOf(long l) |
static String |
valueOf(Object obj) |