StringBuffer的含義:
String和StringBuffer的區別:
- A、String的長度和內容是不可改變的,StringBuffer是可變的
- B、StringBuffer拼接字符串在常量池中不會浪費過多的空間
StringBuffer的構造方法:
public StringBuffer():無參構造方法
public StringBuffer(int capacity):指定容量的字符串緩沖區對象
public StringBuffer(String str):指定字符串內容的字符串緩沖區對象
1 public class StringBufferDemo_my {
2 public static void main(String[] args) {
3 //創建StringBuffer對象
4 StringBuffer sb =
new StringBuffer();
5 // public StringBuffer():無參構造方法
6 System.out.println("sb:"+sb);
//打印發現不是地址值,說明重寫toString方法。
7 System.out.println("長度是:"+sb.length());
//0
8 System.out.println("容量是:"+sb.capacity());
//16,因為容量默認是16
9
10 // public StringBuffer(int capacity):指定容量的字符串緩沖區對象
11 StringBuffer sb2 =
new StringBuffer(50
);
12 System.out.println("sb2:"+sb2);
//打印發現不是地址值,說明重寫toString方法。
13 System.out.println("sb2長度是:"+sb2.length());
//0
14 System.out.println("sb2容量是:"+sb2.capacity());
//50,改了容量了
15
16 // public StringBuffer(String str):指定字符串內容的字符串緩沖區對象
17 StringBuffer sb3 =
new StringBuffer("hello"
);
18 System.out.println("sb3:"+sb3);
//打印發現不是地址值,說明重寫toString方法。
19 System.out.println("sb3長度是:"+sb3.length());
//5
20 System.out.println("sb3容量是:"+sb3.capacity());
//21,16+5=21;
21
22 }
23 }
StringBuffer的方法
1 public class StringBufferDemo_my {
2 public static void main(String[] args) {
3 //創建StringBuffer對象
4 StringBuffer sb =
new StringBuffer();
5 StringBuffer sb2 = sb.append("hello"
);
6 System.out.println(sb);
//hello
7 System.out.println(sb2);
//hello
8 System.out.println("--------------"
);
9 //為什么兩個都是hello,因為StringBuffer創建了一個緩沖區,這個添加就是針對這一個緩沖區的
10 //并不會額外創建對象。返回的也是他自己本身
11
12 //append可以鏈式編程,只不過是添加在字符串的后面
13 sb.append("java").append(
true).append(32.23
);
14 System.out.println(sb);
15 //insert可以在制定的字符串索引位置添加字符串
16 sb.insert(5, "world"
);
17 System.out.println(sb);
18 }
19 }
1 public class StringBufferDemo_my {
2 public static void main(String[] args) {
3 //創建StringBuffer對象
4 StringBuffer sb =
new StringBuffer();
5 sb.append("hello").append("world").append("java"
);
6 //刪除特定索引處的字符
7 sb.deleteCharAt(0);
//elloworldjava
8 System.out.println(sb);
9 //刪除一段索引的字符串
10 sb.delete(0, 4);
//worldjava---為什么是worldjava而不是oworldjava因為java中這樣的方法大部分是包左不包右
11 System.out.println(sb);
12 }
13 }
1 /*
2 * StringBuffer的替換功能:
3 * public StringBuffer replace(int start,int end,String str):從start開始到end用str替換
4 *
5 */
6 public class StringBufferDemo_my {
7 public static void main(String[] args) {
8 //創建StringBuffer對象
9 StringBuffer sb =
new StringBuffer();
10 sb.append("hello").append("world").append("java"
);
11 //需求是把world替換成“節日快樂”
12 sb.replace(5, 10, "節日快樂");
//hello節日快樂java。為什么是5到10,因為包左不包右。
13 System.out.println(sb);
14 }
15 }
1 /*
2 * StringBuffer的反轉功能:
3 * public StringBuffer reverse()
4 */
5 public class StringBufferDemo {
6 public static void main(String[] args) {
7 // 創建字符串緩沖區對象
8 StringBuffer sb =
new StringBuffer();
9
10 // 添加數據
11 sb.append("霞青林愛我"
);
12 System.out.println("sb:" +
sb);
13
14 // public StringBuffer reverse()
15 sb.reverse();
16 System.out.println("sb:" +
sb);
17 }
18 }
1 /*
2 * StringBuffer的截取功能:注意返回值類型不再是StringBuffer本身了
3 * public String substring(int start)
4 * public String substring(int start,int end)
5 *
6 */
7 public class StringBufferDemo_my {
8 public static void main(String[] args) {
9 //創建StringBuffer對象
10 StringBuffer sb =
new StringBuffer();
11 sb.append("helloworldjava"
);
12 System.out.println(sb);
13 sb.substring(0, 5
);
14 System.out.println(sb);
//打印的是helloworldjava,因為返回的是String類型字符串
15 String s = sb.substring(0, 5);
//我們用String字符串接受
16 System.out.println(s);
//hello,打印發現截截取了hello字符串
17 }
18 }
1 /*
2 * 把數組拼接成一個字符串
3 */
4
5 public class StringBufferTest2_my {
6 public static void main(String[] args) {
7 // 定義一個數組
8 int[] arr = { 44, 22, 44, 32, 66
};
9 int[] arr2 = {33,44,55,66,77,88
};
10 // 用方法做拼接
11 String s1 =
arrayTostring(arr);
12 System.out.println(s1);
13
14 String s2 =
arrayTostring(arr2);
15 System.out.println(s2);
16 }
17
18 public static String arrayToString2(
int[] arr) {
19 // 用StringBuffer同樣是調方法
20 StringBuffer sb =
new StringBuffer();
21 sb.append("["
);
22 for(
int i = 0; i<arr.length ; i++
) {
23 if( i == arr.length -1
) {
24 sb.append(arr[i]);
25 }
else {
26 sb.append(arr[i]+" ,"
);
27 }
28 }
29 sb.append("]"
);
30 String s =
sb.toString();
31 return s;
32 }
33
34 public static String arrayTostring(
int[] arr) {
35 String s = ""
;
36 s += "["
;
37 for (
int i = 0; i < arr.length; i++
) {
38 if (i == arr.length - 1
) {
39 s +=
arr[i];
40 }
else {
41 s += arr[i] + " ,"
;
42
43 }
44 }
45 s += "]"
;
46 return s;
47 }
48 }
1 import java.util.Scanner;
2
3 /*
4 * 把字符串反轉
5 *
6 * 方式一:字符串拼接
7 * 用字符串做拼接,思想是寫一個方法,定義一個空的字符串,然后利用toCharArray方法把字符串字符數組
8 * 寫一個for循環,倒著遍歷,把字符數組的值都賦值給字符串,返回這個字符串。
9 * 方式二:用StringBuffer
10 *
11 */
12 public class StringBufferDemo3_my {
13 public static void main(String[] args) {
14 //創建鍵盤錄入對象
15 Scanner sc =
new Scanner(System.in);
16 //錄入字符串
17 System.out.println("請輸入數據"
);
18 String str =
sc.nextLine();
19
20 //用String做拼接
21 String s =
myReverse(str);
22 System.out.println(s);
23
24
25 //利用stringBuffer
26 String str2 =
myReverse2(str);
27 System.out.println(str2);
28
29 }
30 public static String myReverse2(String s) {
31 StringBuffer sb =
new StringBuffer();
32 sb.append(s);
33 sb.reverse();
34 return sb.toString();
35 }
36
37 public static String myReverse(String s) {
38 String result= ""
;
39 char[] cha =
s.toCharArray();
40 for(
int i = cha.length-1; i>=0 ; i--
) {
41 result +=
cha[i];
42 }
43 return result;
44 }
45
46
47 }
1 import java.util.Scanner;
2
3 /*
4 * 判斷一個字符串是不是對成的字符串
5 *
6 */
7
8 public class StringBufreTest4_my {
9 public static void main(String[] args) {
10 //創建字符錄入對象
11 Scanner sc =
new Scanner(System.in);
12 //錄入數據
13 System.out.println("請錄入數據"
);
14 String str =
sc.nextLine();
15 System.out.println(isSame(str));
16
17 }
18 public static boolean isSame(String s) {
19 return new StringBuffer(s).reverse().toString().equals(s);
20 }
21 }
1 /*
2 * 面試題:
3 * 1:String,StringBuffer,StringBuilder的區別?
4 * A:String是內容不可變的,而StringBuffer,StringBuilder都是內容可變的。
5 * B:StringBuffer是同步的,數據安全,效率低;StringBuilder是不同步的,數據不安全,效率高
6 *
7 * 2:StringBuffer和數組的區別?
8 * 二者都可以看出是一個容器,裝其他的數據。
9 * 但是呢,StringBuffer的數據最終是一個字符串數據。
10 * 而數組可以放置多種數據,但必須是同一種數據類型的。
11 *
12 * 3:形式參數問題
13 * String作為參數傳遞
14 * StringBuffer作為參數傳遞
15 *
16 * 形式參數:
17 * 基本類型:形式參數的改變不影響實際參數
18 * 引用類型:形式參數的改變直接影響實際參數
19 *
20 * 注意:
21 * String作為參數傳遞,效果和基本類型作為參數傳遞是一樣的。
22 */
23 public class StringBufferDemo {
24 public static void main(String[] args) {
25 String s1 = "hello"
;
26 String s2 = "world"
;
27 System.out.println(s1 + "---" + s2);
// hello---world
28 change(s1, s2);
29 System.out.println(s1 + "---" + s2);
// hello---world
30
31 StringBuffer sb1 =
new StringBuffer("hello"
);
32 StringBuffer sb2 =
new StringBuffer("world"
);
33 System.out.println(sb1 + "---" + sb2);
// hello---world
34 change(sb1, sb2);
35 System.out.println(sb1 + "---" + sb2);
// hello---worldworld
36
37 }
38
39 public static void change(StringBuffer sb1, StringBuffer sb2) {
40 sb1 =
sb2;
41 sb2.append(sb1);
42 }
43
44 public static void change(String s1, String s2) {
45 s1 =
s2;
46 s2 = s1 +
s2;
47 }
48 }
?
轉載于:https://www.cnblogs.com/ssshhh/p/11026398.html
總結
以上是生活随笔為你收集整理的十三、StringBuffer的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。