Java StringBuffer和StringBuilder
StringBuffer
java.lang.StringBuffer 类是字符串线程安全的可变序列。以下是关于StringBuffer的要点:
- StringBuffer像是一个字符串,和 String 类不同的是,StringBuffer类 (StringBuilder 类也一样)的对象能够被多次的修改,并且不产生新的未使用对象,在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
- 它包含某些特定的字符序列,但该序列的长度和内容可以通过某些方法调用来改变。
- 是线程安全的多线程应用。
- 使用synchronized 关键字来通过线程同步来实现线程安全,因此也相对较慢
- 每个字符串有缓冲区容量
- 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer
使用教程
初始化/构造方法
- StringBuffer() 构造一个16个字符长度的字符串缓冲区,源码见构造方法1
StringBuffer sb = new StringBuffer(); |
- StringBuffer(String str) 指定字符串内容的字符串缓冲区对象,源码见构造方法2
- 字符串缓冲区长度为
str.length() + 16
- 字符串缓冲区长度为
StringBuffer sb = new StringBuffer("abc"); |
- StringBuffer(int capacity) 指定初始容量的字符串缓冲区,源码见构造方法3
StringBuffer sb = new StringBuffer(16); |
- StringBuffer(CharSequence cSeq)
CharSequence cSeq = "online"; |
增
public StringBuffer append(String s)
- 该方法更新对象的值。该方法采用:boolean,char,int,long,String,字符集合等类型。
StringBuffer buff = new StringBuffer("tuts "); |
输出:
buffer = tuts |
StringBuffer append(char[] str, int offset, int len)
public static void main(String[] args) { |
输出:
buffer = amrood |
删
- StringBuffer delete(int start, int end)
此方法删除这个序列中的一个子串的字符
改
- StringBuffer replace(int start, int end, String str)
此方法替换这个序列中的特定字符串的子字符串。
查
int capacity()
此方法返回当前容量int length()
此方法返回长度(字符数)此方法返回表示此序列中数据的字符串
实现原理
构造方法1
/** |
构造方法2
/** |
构造方法3
/** |
StringBuilder
StringBuilder和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
String类方法
String concat(String str)
此方法串连指定字符串到该字符串的结尾public class StringDemo {
public static void main(String[] args) {
// print str1
String str1 = "self";
System.out.println(str1);
// print str2 concatenated with str1
String str2 = str1.concat(" learning");
System.out.println(str2);
// prints str3 concatenated with str2(and str1)
String str3 = str2.concat(" center");
System.out.println(str3);
}
}Output:
self
self learning
self learning centerboolean equals(Object anObject)
此方法让该字符串与指定的对象进行比较static String format(String format, Object… args) 此方法返回使用指定格式字符串和参数的格式化字符串
boolean isEmpty()
此方法返回true,当且仅当length()为0int length()
这个方法返回这个字符串的长度String replace(char oldChar, char newChar)
此方法返回通过用newChar更换所有oldChar出现在此字符串,产生一个新的字符串[String] split(String regex)
这种分割方法根据给定的正则表达式匹配这个字符串public class StringDemo {
public static void main(String[] args) {
String str = "a d, m, i.n";
String delimiters = "\s+|,\s*|\.\s*";
// analyzing the string
String[] tokensVal = str.split(delimiters);
// prints the number of tokens
System.out.println("Count of tokens = " + tokensVal.length);
for(String token : tokensVal) {
System.out.print(token);
}
}
}output:
Count of tokens = 5
adminchar[] toCharArray()
此方法这个字符串到一个新的字符数组转换String toLowerCase()
此方法将所有在此字符串中的字符使用默认语言环境的规则为小写String toUpperCase()
此方法使用默认语言环境的规则将这个字符串所有的字转为大写sb.toString()
StringBuffer和StringBuilder对象转String字符串对象char charAt(int index)
此方法返回指定索引处的char值。反转指定长度的字符串
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder sb = new StringBuilder();
for(int i = n; i < s.length(); i++){
sb.append(s.charAt(i));
}
for(int i = 0; i < n; i++){
sb.append(s.charAt(i));
}
return sb.toString();
}
}