文章目录
前言
先说一下StringBuilder的好处吧!
对字符串进行拼接:
/**
* 字符串拼接
*/
private static void method1() {
long start = System.currentTimeMillis();//获取1970年1月1日 0时0分0秒 到当前时间所经历的毫秒值
String s = "";
for (int i = 0; i < 50000; i++) {
s += i;
}
long end = System.currentTimeMillis();
System.out.println(end - start);//1315
}
用StringBuilder进行字符串拼接,所消耗的时间大大缩短。
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
long start = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
sb.append(i);
}
System.out.println(start);
long end = System.currentTimeMillis();
System.out.println(end - start);//11
}
1. StringBuilder类
1.1 StringBuilder类概述
概述:StringBuilder是一个可变的字符串类,我们可以把它看成一个容器,这里的可变指的是StringBuilder对象中的内容是可变的。
1.2 StringBuilder类和String类的区别
- String类: 内容是不可变的
- StringBuilder类: 内容是可变的
1.3 StringBuilder类的构造方法
- 常用构造方法
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | 根据字符串内容,来创建可变字符串对象 |
- 示例代码
当你打印String和StringBuilder对象时,只会出现字符串内容,而不会出现字符串地址。
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder();
System.out.println(sb1);
StringBuilder sb2 = new StringBuilder("Java");
System.out.println(sb2);
}
1.4 StringBuilder常用的成员方法
- 方法介绍
方法名 | 说明 |
---|---|
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符串序列 |
public int length() | 返回长度(字符出现的个数) |
public String toString() | 通过toString()就可以实现把StringBuilder转换为String |
- 代码示例
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
// 什么类型的数据都可以添加
sb.append(521).append("Java").append(true);//521Javatrue
System.out.println(sb);
// 长度可变的字符串
StringBuilder sb1 = new StringBuilder();
sb1.append("小白"); //小白
System.out.println(sb1);
sb1.append("小黑");
System.out.println(sb1); //小白小黑
sb1.append("小红");
System.out.println(sb1); //小白小黑小红
// 返回对象本身
StringBuilder sb2 = new StringBuilder();
StringBuilder zt = sb2.append("昨天");
StringBuilder jt = sb2.append("今天");
StringBuilder mt = sb2.append("明天");
// 比较一下内存地址,表示指的同一个对象
// sb2、zt、jt、mt调用append都会添加到sb2 中
mt.append("现在");
System.out.println(sb2 == zt );//true
System.out.println(zt == jt );//true
System.out.println(jt == mt );//true
System.out.println(zt);//昨天今天明天
System.out.println(jt);//昨天今天明天
System.out.println(mt);//昨天今天明天
// 通过添加数据时,返回值为对象本身,就可以对添加代码进行优化
StringBuilder sb3 = new StringBuilder();
// 链式编程,如果一个方法返回的是对象类型,那么对象就可以继续向下调用方法
StringBuilder append = sb3.append("1").append(2).append(3);
System.out.println(append);//123
//反转
StringBuilder sb4 = new StringBuilder();
StringBuilder append1 = sb4.append(1).append(2).append(3);
System.out.println("反转之前:" +append1);//反转之前:123
System.out.println("反转之后:"+append1.reverse());// 反转之后:321
//长度
System.out.println("长度:" + sb4.length());
//通过toString() 就可以实现把StringBuilder转换为String
String s = sb4.toString();
System.out.println(s);//321
}
- 原理图解
普通字符串拼接
使用StringBuilder进行拼接
- 练习: 键盘接收一个字符串,程序判断该字符串是否是对称字符串,并在控制台打印是或不是。
public static void main(String[] args) {
//键盘录入用StringBuilder来实现
Scanner scanner = new Scanner(System.in);
System.out.println("请输入对称字符串:");
String s = scanner.nextLine();
//将字符串封装为StringBuilder对象
StringBuilder sb = new StringBuilder(s);
sb.reverse();
//s : String类型
//sb : StringBuilder
// 类型不一样没有可比性,不要忘记用toString()转换一下
if (s.equals(sb.toString())) {
System.out.println("是对称字符串");
} else {
System.out.println("不是对称字符串");
}
}
1.5 StringBuilder和String相互转换
- StringBuilder转换为String
public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String - String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
1.6 拼接字符串案例
public static void main(String[] args) {
int[] arr = {11,22,33};
String s = arrayToString(arr);
System.out.println(s);
}
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder("[");
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();
}
会有人给我点赞嘛!