1. 引入
- 用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了一个字符串缓冲区类。StringBuffer供我们使用。
2. StringBuffer的常见功能
-
A. 添加功能
public StringBuffer append(String str)(在末尾追加) : 把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset , String str)(插入,嵌入) : 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
-
B. 删除功能
public StringBuffer deleteCharAt(int index) : 删除指定位置的字符,并返回本身
public StringBuffer delete(int start , int end) : 删除从指定位置开始到指定位置结束的内容,并返回本身
-
C. 替换功能
public StringBuffer replace(int start , int end , String str ) : 从start开始到end用str替换
-
D. 反转功能
/*
* public StringBuffer reverse() : StringBuffer的反转功能
*/
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("FAW爱我");
System.out.println(sb);
sb.reverse();
System.out.println(sb);
}
}
-
E. 截取功能
public String substring(int start)
public String substring(int start,int end)
注意,截取功能的返回值为String类型
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello").append("world").append("java");
System.out.println("sb:" + sb);
// public String substring(int start)
String s = sb.substring(5);
System.out.println("s:" + s);
System.out.println("sb:" + sb);
// public String substring(int start,int end)
String ss = sb.substring(5, 10);
System.out.println("ss:" + ss);
System.out.println("sb:" + sb);
}
}
3. StringBuffer和String间的相互转换
public class StringBufferTest {
public static void main(String[] args) {
String s = "hello";
StringBuffer sb = new StringBuffer(s);
StringBuffer sb2 = new StringBuffer();
sb2.append(s);
System.out.println("sb:" + sb);
System.out.println("sb2:" + sb2);
System.out.println("---------------");
StringBuffer buffer = new StringBuffer("java");
String str = new String(buffer);
String str2 = buffer.toString();
System.out.println("str:" + str);
System.out.println("str2:" + str2);
}
}
4. 字符串反转功能案例
import java.util.Scanner;
public class StringBufferTest3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要反转的字符串");
String s = sc.nextLine();
String s1 = myReverse(s);
System.out.println("s1:" + s1);
String s2 = myReverse2(s);
System.out.println("s2:" + s2);
}
public static String myReverse2(String s) {
// StringBuffer sb = new StringBuffer();
// sb.append(s);
//
// // StringBuffer sb = new StringBuffer(s);
// sb.reverse();
// return sb.toString();
return new StringBuffer().append(s).reverse().toString();
// 链式编程
// return new StringBuffer(s).reverse().toString();
}
public static String myReverse(String s) {
String result = "";
char[] chs = s.toCharArray();
for (int x = chs.length - 1; x >= 0; x--) {
// char ch = chs[x];
// result += ch;
result += chs[x];
}
return result;
}
}
5. 判断一个字符串是否对称(StringBuffer反转功能)
/*
* 判断一个字符串是否对称,巧用StringBuffer的反转功能
*/
import java.util.Scanner;
public class StringBufferTest4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串,看其是否对称:");
String s = sc.nextLine();
// boolean b = isSame(s);
// System.out.println("b:" + b);
boolean b2 = isSame2(s);
System.out.println("b2:"+b2);
}
public static boolean isSame2(String s) {
return new StringBuffer(s).reverse().toString().equalsIgnoreCase(s);
}
// public static boolean isSame(String s) {
// boolean flag = true;
//
//
// char[] chs = s.toCharArray();
//
// for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
// if (chs[start] != chs[end]) {
// flag = false;
// break;
// }
// }
//
// return flag;
// }
}
6. String , StringBuffer , StringBuilder的区别 ?
- String内容时不可变的,而StringBuffer,StringBuilder都是内容可变的。
- String和StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
7. StringBuffer和数组的区别 ?
- 二者都可以看成是一个容器,装其它的数据。
- StringBuffer的主句最终是一个字符串数据。
- 数组可以放置多种数据,但必须是同一种数据类型的。