java之StringBuilder StringBuffer String

img

在使用 StringBuffer 或StringBuilder 类时,每次都会对对象本身进行操作,而不是像String生成新的对象

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。

StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的

StringBuilder StringBuffer(方法基本相同)

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
StringBuilder sb = new StringBuilder();
// 对象名.length() 序列长度
System.out.println(sb.length()); // 0
System.out.println(sb.capacity()); //获取容量, 大于等于length, 当capacity不够时会自动扩容

// 对象名.append() 追加到序列
sb.append("hello");
System.out.println(sb); // hello

// 链式编程
sb.append(1).append("world").append(2);
System.out.println(sb); // helloa1world2

// 索引是5的位置替换成空格
sb.setCharAt(5, ' ');
System.out.println(sb); // hello 1world2

// 指定位置0前插入0
sb.insert(0, 0);
System.out.println(sb); // 0hello 1world2

// 删除索引6(包含)至索引14(不包含)的字符串
sb.delete(6, 14);
System.out.println(sb); // 0hello




1
2
3
4
5
6
7
8
9
10
11
public StringBuffer append(Object o);

public StringBuffer reverse();

public delete(int start, int end);

public insert(int offset, Object o)

replace(int start, int end, String str);

...其他String方法...

String

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// 字符数组转为String
new String({ 'h', 'e', 'l', 'l', 'o', '.'});

// 字符串连接
String.concat(String);
String+String;

// String.format : String
System.out.println(String.format("The value of %f, while variable is %d, and is %s", 2.2, 2, "de")); // The value of 2.200000, while variable is 2, and is de

char charAt(int index);

int compareTo(String s); // 字典序比较, 完全equal返回0

int compareToIgnoreCase(String s);

String concat(String str);

static String copyValueOf(char[] data , [int offset, int count]);

boolean endsWith(String suffix);

boolean equals(Object anObject);
boolean equalsIgnoreCase(String anotherString);

byte[] getBytes([String charSet]);

int hashCode(); // 返回此字符串的哈希码

int indexOf(int ch, [int fromIndex]); // 从指定索引开始查找
int indexOf(String str, [int fromIndex]); // 从指定索引开始查找
...lastIndexOf...

boolean matches(String regex);

String replace(char oldChar, char newChar);
String replaceAll(String regex, String replacement; // 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement);

String[] split(String regex, [int limit]); // 指定分割的份数

boolean startsWith(String prefix);

CharSequence subSequence(int beginIndex, int endIndex);

String substring(int beginIndex, [int endIndex]);

char[] toCharArray();

String toLowerCase();
String toUpperCase();

String trim();

static String valueOf(primitive data type x); // 返回给定data type类型x参数的字符串表示形式。


之间的转换

1
2
3
4
5
6
7
8
// string转换成StringBuilder
String str = "hello";
StringBuilder sb = new StringBuilder(str);
System.out.println(sb); // hello
// StringBuilder转换成String
String s = sb.toString();
System.out.println(s); // hello