1 字符串使用 + 直接拼接 速度慢
package com.bjpowernode;
public class StringBuuilder01 {
public static void main(String[] args) {
String s = "";
for (int i = 0; i < 1000000; i++) {
s += "abc";
}
System.out.println(s);
}
}
字符串 + 拼接 100万次,会非常慢
使用 StringBuilder 就会非常快
package com.bjpowernode;
public class StringBuilder02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000000; i++) {
sb.append("abc");
}
System.out.println(sb);
}
}
2 StringBuilder 概述
StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的
作用:提高字符串的操作效率
2.1 StringBuilder 构造方法
- public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
- public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象
2.2 StringBuilder 成员方法
- public StringBuilder append(任意类型) 添加数据,并返回对象本身
- public StringBuilder reverse() 反转容器中的内容
- public int length() 返回长度(字符出现的个数)
- public String toString() 可以实现把 StringBuilder 转换为 String
package com.bjpowernode;
public class StringBuuilder01 {
public static void main(String[] args) {
//创建对象
StringBuilder sb = new StringBuilder();
//打印
//普及:
//因为StringBuilder是Java已经写好的类
//java在底层对他做了一些特殊处理。
//打印对象不是地址值而是属性值。
// System.out.println(sb); //没有打印地址值,显示台什么都没有输出
//添加元素
sb.append("abc");
sb.append(1);
sb.append(2.3);
sb.append(true);
System.out.println(sb); //abc12.3true
sb.reverse();
System.out.println(sb); //eurt3.21cba
System.out.println(sb.length()); //11
String str = sb.toString(); //变回字符串
System.out.println(str); //eurt3.21cba
}
}
2.2.1 通过链式编程修改上述代码
//添加元素
// sb.append("abc");
// sb.append(1);
// sb.append(2.3);
// sb.append(true);
//可以改成链式编程
sb.append("abc").append(1).append(2.3).append(true);
3 链式编程
链式编程:当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法
package com.bjpowernode;
import java.util.Scanner;
public class StringBuilder02 {
public static void main(String[] args) {
//链式编程:
//当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法
int len = getString().substring(1).replace("A", "Q").length();
System.out.println(len);
}
public static String getString(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
return str;
}
}
运行结果:
4 使用 StringBuilder 的场景
- 字符串的拼接
- 字符串的反转
5 StringBuilder 练习
5.1 对称字符串
需求:键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是
对称即:正、反 一样
package com.bjpowernode;
import java.util.Scanner;
public class StringBuilder03 {
public static void main(String[] args) {
//键盘录入一个字符串
System.out.println("请输入一个字符串");
Scanner sc = new Scanner(System.in);
String str = sc.next();
//反转键盘录入的字符串
// StringBuilder sb = new StringBuilder(); //利用StringBuuilder 的方法反转
String reserveStr = new StringBuilder().append(str).reverse().toString();
//比较两个字符串
if(str.equals(reserveStr)){
System.out.println("是一个对称字符串");
}else{
System.out.println("不是一个对称字符串");
}
}
}
运行结果:
5.2 拼接字符串
需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回。
调用该方法,并在控制台输出结果。
例如:数组为int[] arr ={1,2,3};
执行方法后的输出结果为:[1,2,3]
package com.bjpowernode;
public class StringBuilder04 {
public static void main(String[] args) {
//定义数组
int[] arr = {1, 2, 3};
//调用方法把数组变成字符串
System.out.println(arrToString(arr));
}
public static String arrToString(int[] arr){
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i != arr.length -1) {
sb.append(arr[i]).append(",");
} else {
sb.append(arr[i]).append("]");
}
}
return sb.toString();
}
}
运行结果: