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二分查找及排序算法的主要内容,如果未能解决你的问题,请参考以下文章