Java笔记(07):常见对象--StringBuffer二分查找及排序算法

Posted 花醉红尘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java笔记(07):常见对象--StringBuffer二分查找及排序算法相关的知识,希望对你有一定的参考价值。

1、StringBuffer类的构造方法

 1 package cn.itcast_01;
 2 
 3 /*
 4  * 线程安全(多线程讲解)
 5  * 安全 -- 同步 -- 数据是安全的
 6  * 不安全 -- 不同步 -- 效率高一些
 7  * 安全和效率问题是永远困扰我们的问题。
 8  * 安全:医院的网站,银行网站
 9  * 效率:新闻网站,论坛之类的
10  * 
11  * StringBuffer:
12  *         线程安全的可变字符串。
13  * 
14  * StringBuffer和String的区别?
15  * 前者长度和内容可变,后者不可变。
16  * 如果使用前者做字符串的拼接,不会浪费太多的资源。
17  * 
18  * StringBuffer的构造方法:
19  *         public StringBuffer():无参构造方法
20  *        public StringBuffer(int capacity):指定容量的字符串缓冲区对象
21  *        public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
22  *
23  * StringBuffer的方法:
24  *        public int capacity():返回当前容量。    理论值
25  *        public int length():返回长度(字符数)。 实际值
26  */
27 public class StringBufferDemo {
28     public static void main(String[] args) {
29         // public StringBuffer():无参构造方法
30         StringBuffer sb = new StringBuffer();
31         System.out.println("sb:" + sb);
32         System.out.println("sb.capacity():" + sb.capacity());
33         System.out.println("sb.length():" + sb.length());
34         System.out.println("--------------------------");
35 
36         // public StringBuffer(int capacity):指定容量的字符串缓冲区对象
37         StringBuffer sb2 = new StringBuffer(50);
38         System.out.println("sb2:" + sb2);
39         System.out.println("sb2.capacity():" + sb2.capacity());
40         System.out.println("sb2.length():" + sb2.length());
41         System.out.println("--------------------------");
42 
43         // public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
44         StringBuffer sb3 = new StringBuffer("hello");
45         System.out.println("sb3:" + sb3);
46         System.out.println("sb3.capacity():" + sb3.capacity());
47         System.out.println("sb3.length():" + sb3.length());
48     }
49 }

2、StringBuffer的添加功能

 1 package cn.itcast_02;
 2 
 3 /*
 4  * StringBuffer的添加功能:
 5  * public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
 6  * 
 7  * public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
 8  */
 9 public class StringBufferDemo {
10     public static void main(String[] args) {
11         // 创建字符串缓冲区对象
12         StringBuffer sb = new StringBuffer();
13 
14         // public StringBuffer append(String str)
15         // StringBuffer sb2 = sb.append("hello");
16         // System.out.println("sb:" + sb);
17         // System.out.println("sb2:" + sb2);
18         // System.out.println(sb == sb2); // true
19 
20         // 一步一步的添加数据
21         // sb.append("hello");
22         // sb.append(true);
23         // sb.append(12);
24         // sb.append(34.56);
25 
26         // 链式编程
27         sb.append("hello").append(true).append(12).append(34.56);
28         System.out.println("sb:" + sb);
29 
30         // public StringBuffer insert(int offset,String
31         // str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
32         sb.insert(5, "world");
33         System.out.println("sb:" + sb);
34     }
35 }

3、StringBuffer的删除功能

 1 package cn.itcast_03;
 2 
 3 /*
 4  * StringBuffer的删除功能
 5  * public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
 6  * public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
 7  */
 8 public class StringBufferDemo {
 9     public static void main(String[] args) {
10         // 创建对象
11         StringBuffer sb = new StringBuffer();
12 
13         // 添加功能
14         sb.append("hello").append("world").append("java");
15         System.out.println("sb:" + sb);
16 
17         // public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
18         // 需求:我要删除e这个字符,肿么办?
19         // sb.deleteCharAt(1);
20         // 需求:我要删除第一个l这个字符,肿么办?
21         // sb.deleteCharAt(1);
22 
23         // public StringBuffer delete(int start,int
24         // end):删除从指定位置开始指定位置结束的内容,并返回本身
25         // 需求:我要删除world这个字符串,肿么办?
26         // sb.delete(5, 10);
27 
28         // 需求:我要删除所有的数据
29         sb.delete(0, sb.length());
30 
31         System.out.println("sb:" + sb);
32     }
33 }

4、StringBuffer的替换功能

 1 package cn.itcast_04;
 2 
 3 /*
 4  * StringBuffer的替换功能:
 5  * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
 6  */
 7 public class StringBufferDemo {
 8     public static void main(String[] args) {
 9         // 创建字符串缓冲区对象
10         StringBuffer sb = new StringBuffer();
11 
12         // 添加数据
13         sb.append("hello");
14         sb.append("world");
15         sb.append("java");
16         System.out.println("sb:" + sb);
17 
18         // public StringBuffer replace(int start,int end,String
19         // str):从start开始到end用str替换
20         // 需求:我要把world这个数据替换为"节日快乐"
21         sb.replace(5, 10, "节日快乐");
22         System.out.println("sb:" + sb);
23     }
24 }

5、StringBuffer的反转功能

 1 package cn.itcast_05;
 2 
 3 /*
 4  * StringBuffer的反转功能:
 5  * public StringBuffer reverse()
 6  */
 7 public class StringBufferDemo {
 8     public static void main(String[] args) {
 9         // 创建字符串缓冲区对象
10         StringBuffer sb = new StringBuffer();
11 
12         // 添加数据
13         sb.append("霞青林爱我");
14         System.out.println("sb:" + sb);
15 
16         // public StringBuffer reverse()
17         sb.reverse();
18         System.out.println("sb:" + sb);
19     }
20 }

6、StringBuffer的截取功能

 1 package cn.itcast_06;
 2 
 3 /*
 4  * StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
 5  * public String substring(int start)
 6  * public String substring(int start,int end)
 7  */
 8 public class StringBufferDemo {
 9     public static void main(String[] args) {
10         // 创建字符串缓冲区对象
11         StringBuffer sb = new StringBuffer();
12 
13         // 添加元素
14         sb.append("hello").append("world").append("java");
15         System.out.println("sb:" + sb);
16 
17         // 截取功能
18         // public String substring(int start)
19         String s = sb.substring(5);
20         System.out.println("s:" + s);
21         System.out.println("sb:" + sb);
22 
23         // public String substring(int start,int end)
24         String ss = sb.substring(5, 10);
25         System.out.println("ss:" + ss);
26         System.out.println("sb:" + sb);
27     }
28 }

练习1、StringBuffer和String的相互转换

 1 package cn.itcast_07;
 2 
 3 /*
 4  * 为什么我们要讲解类之间的转换:
 5  * A -- B的转换
 6  * 我们把A转换为B,其实是为了使用B的功能。
 7  * B -- A的转换
 8  * 我们可能要的结果是A类型,所以还得转回来。
 9  * 
10  * String和StringBuffer的相互转换?
11  */
12 public class StringBufferTest {
13     public static void main(String[] args) {
14         // String -- StringBuffer
15         String s = "hello";
16         // 注意:不能把字符串的值直接赋值给StringBuffer
17         // StringBuffer sb = "hello";
18         // StringBuffer sb = s;
19         // 方式1:通过构造方法
20         StringBuffer sb = new StringBuffer(s);
21         // 方式2:通过append()方法
22         StringBuffer sb2 = new StringBuffer();
23         sb2.append(s);
24         System.out.println("sb:" + sb);
25         System.out.println("sb2:" + sb2);
26         System.out.println("---------------");
27 
28         // StringBuffer -- String
29         StringBuffer buffer = new StringBuffer("java");
30         // String(StringBuffer buffer)
31         // 方式1:通过构造方法
32         String str = new String(buffer);
33         // 方式2:通过toString()方法
34         String str2 = buffer.toString();
35         System.out.println("str:" + str);
36         System.out.println("str2:" + str2);
37     }
38 }

练习2、把数组拼接成指定格式的字符串案例

 1 package cn.itcast_07;
 2 
 3 /*
 4  * 把数组拼接成一个字符串
 5  */
 6 public class StringBufferTest2 {
 7     public static void main(String[] args) {
 8         // 定义一个数组
 9         int[] arr = { 44, 33, 55, 11, 22 };
10 
11         // 定义功能
12         // 方式1:用String做拼接的方式
13         String s1 = arrayToString(arr);
14         System.out.println("s1:" + s1);
15 
16         // 方式2:用StringBuffer做拼接的方式
17         String s2 = arrayToString2(arr);
18         System.out.println("s2:" + s2);
19     }
20 
21     // 用StringBuffer做拼接的方式
22     public static String arrayToString2(int[] arr) {
23         StringBuffer sb = new StringBuffer();
24 
25         sb.append("[");
26         for (int x = 0; x < arr.length; x++) {
27             if (x == arr.length - 1) {
28                 sb.append(arr[x]);
29             } else {
30                 sb.append(arr[x]).append(", ");
31             }
32         }
33         sb.append("]");
34 
35         return sb.toString();
36     }
37 
38     // 用String做拼接的方式
39     public static String arrayToString(int[] arr) {
40         String s = "";
41 
42         s += "[";
43         for (int x = 0; x < arr.length; x++) {
44             if (x == arr.length - 1) {
45                 s += arr[x];
46             } else {
47                 s += arr[x];
48                 s += ", ";
49             }
50         }
51         s += "]";
52 
53         return s;
54     }
55 }

练习3、字符串反转功能案例

 1 package cn.itcast_07;
 2 
 3 import java.util.Scanner;
 4 
 5 /*
 6  * 把字符串反转
 7  */
 8 public class StringBufferTest3 {
 9     public static void main(String[] args) {
10         // 键盘录入数据
11         Scanner sc = new Scanner(System.in);
12         System.out.println("请输入数据:");
13         String s = sc.nextLine();
14 
15         // 方式1:用String做拼接
16         String s1 = myReverse(s);
17         System.out.println("s1:" + s1);
18         // 方式2:用StringBuffer的reverse()功能
19         String s2 = myReverse2(s);
20         System.out.println("s2:" + s2);
21     }
22 
23     // 用StringBuffer的reverse()功能
24     public static String myReverse2(String s) {
25         // StringBuffer sb = new StringBuffer();
26         // sb.append(s);
27 
28         // StringBuffer sb = new StringBuffer(s);
29         // sb.reverse();
30         // return sb.toString();
31 
32         // 简易版
33         return new StringBuffer(s).reverse().toString();
34     }
35 
36     // 用String做拼接
37     public static String myReverse(String s) {
38         String result = "";
39 
40         char[] chs = s.toCharArray();
41         for (int x = chs.length - 1; x >= 0; x--) {
42             // char ch = chs[x];
43             // result += ch;
44             result += chs[x];
45         }
46 
47         return result;
48     }
49 }

练习4、判断一个字符串是否对称案例

 1 package cn.itcast_07;
 2 
 3 import java.util.Scanner;
 4 
 5 /*
 6  * 判断一个字符串是否是对称字符串
 7  * 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
 8  * 
 9  * 分析:
10  *         判断一个字符串是否是对称的字符串,我只需要把
11  *             第一个和最后一个比较
12  *             第二个和倒数第二个比较
13  *             ...
14  *         比较的次数是长度除以2。
15  */
16 public class StringBufferTest4 {
17     public static void main(String[] args) {
18         // 创建键盘录入对象
19         Scanner sc = new Scanner(System.in);
20         System.out.println("请输入一个字符串:");
21         String s = sc.nextLine();
22 
23         // 一个一个的比较
24         boolean b = isSame(s);
25         System.out.println("b:" + b);
26         
27         //用字符串缓冲区的反转功能
28         boolean b2 = isSame2(s);
29         System.out.println("b2:"+b2);
30     }
31     
32     public static boolean isSame2(String s) {
33         return new StringBuffer(s).reverse().toString().equals(s);
34     }
35     
36 
37     // public static boolean isSame(String s) {
38     // // 把字符串转成字符数组
39     // char[] chs = s.toCharArray();
40     //
41     // for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
42     // if (chs[start] != chs[end]) {
43     // return false;
44     // }
45     // }
46     //
47     // return true;
48     // }
49 
50     public static boolean isSame(String s) {
51         boolean flag = true;
52 
53         // 把字符串转成字符数组
54         char[] chs = s.toCharArray();
55 
56         for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
57             if (chs[start] != chs[end]) {
58                 flag = false;
59                 break;
60             }
61         }
62 
63         return flag;
64     }
65 }

 练习5、String和StringBuffer分别作为参数传递(注意理解)

 1 package cn.itcast_08;
 2 
 3 /*
 4  * 面试题:
 5  * 1:String,StringBuffer,StringBuilder的区别?
 6  * A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
 7  * B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
 8  * 
 9  * 2:StringBuffer和数组的区别?
10  * 二者都可以看出是一个容器,装其他的数据。
11  * 但是呢,StringBuffer的数据最终是一个字符串数据。
12  * 而数组可以放置多种数据,但必须是同一种数据类型的。
13  * 
14  * 3:形式参数问题
15  * String作为参数传递
16  * StringBuffer作为参数传递 
17  * 
18  * 形式参数:
19  *         基本类型:形式参数的改变不影响实际参数
20  *         引用类型:形式参数的改变直接影响实际参数
21  * 
22  * 注意:
23  *         String作为参数传递,效果和基本类型作为参数传递是一样的。
24  */
25 public class StringBufferDemo {
26     public static void main(String[] args) {
27         String s1 = "hello";
28         String s2 = "world";
29         System.out.println(s1 + "---" + s2);// hello---world
30         change(s1, s2);
31         System.out.println(s1 + "---" + s2);// hello---world
32 
33         StringBuffer sb1 = new StringBuffer("hello");
34         //System.out.println("sb1:" + sb1);
35         StringBuffer sb2 = new StringBuffer("world");
36         //sb1=sb2;//改变sb1的地址
37         System.out.println(sb1 + "---" + sb2);// hello---world
38         change(sb1, sb2);
39         System.out.println(sb1 + "---" + sb2);// hello---worldworld
40 
41     }
42 
43     public 以上是关于Java笔记(07):常见对象--StringBuffer二分查找及排序算法的主要内容,如果未能解决你的问题,请参考以下文章

Java 字符串常见的操作

Java笔记(12):常见对象String

10.7-全栈Java笔记:常见流详解

Java笔记(07):面向对象--多态

Java: Java学习笔记之 String的常见用法

Java: Java学习笔记之 String的常见用法