StringBuilder
- StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的。
- 好处:StringBuilder比String更适合做字符串的修该操作,效率会更高,代码也会更简洁。
构造器 | 说明 |
---|---|
public StringBuilder ( ) | 创建一个空白的可变的字符串对象,不包含任何内容 |
public StringBuilder ( String str ) | 创建一个指定字符串内容的可变字符串对象 |
构造器 | 说明 |
---|---|
public StringBuilder append ( 任意类型 ) | 添加数据并返回StringBuilder对象本身 |
public StringBuilder reverse ( ) | 将对象的内容反转 |
public int length ( ) | 返回对象内容的长度 |
public String toString ( ) | 通过toString()就可以实现把StringBuilder转换为String |
public class Test {public static void main(String[] args) {// 目标:搞清StringBuilder的用法和作用StringBuilder s = new StringBuilder("abcd");// 拼接内容s.append(11);s.append("qwer");s.append(true);// 支持链式编程s.append(666).append("wwwww").append("123");System.out.println(s);// 反转操作s.reverse();System.out.println(s);// 返回字符串长度System.out.println(s.length());// 把StringBuilder对象又转换成String类型String rs = s.toString();System.out.println(rs);}
}
为什么操作字符串建议使用StringBuilder,而不用String
public class Test {public static void main(String[] args) {// 目标:搞清StringBuilder的好处// 需求:需要拼接100万次的abc// 先用String测试String rs = "";for (int i = 1; i <= 1000000; i++) {rs = rs + "abc";}System.out.println(rs);}
}
public class Test {public static void main(String[] args) {// 目标:搞清StringBuilder的好处// 需求:需要拼接100万次的abc// 使用StringBuilderStringBuilder s = new StringBuilder();for (int i = 1; i <= 1000000; i++) {s.append("abc");}System.out.println(s);}
}
如果使用String来完成这个任务的话,要等到结果需要较长的时间,因为String类型的每次添加abc的时候都会创建一个新的对象导致效率非常的慢。使用StringBuilder时就可以避免这个问题,差不多1~2秒的时间就可以得出结果。
- 对于字符串相关的操作,如频繁的拼接、修改等,建议使用StringBuilder,效率更高。
- 注意:如果存在字符较少,或者不需要存在,以及定义字符串变量,还是建议使用String。
StringBuffer
StringBuilder与StringBuffer
注意:
- StringBuilder的用法与StringBuffer是一模一样的
- 但StringBuilder是线程不安全的,StringBuffer是线程安全的
案例:返回任意整形数组的内容
public class Test {public static void main(String[] args) {// 目标:完成数组遍历,并拼接成指定格式int[] arr = new int[]{11,22,33};System.out.println(getArrayData(arr));}public static String getArrayData(int[] arr){// 判断数组是否为nullif (arr == null){return null;}StringBuilder s = new StringBuilder();s.append("[");for (int i = 0; i < arr.length; i++) {if (i != arr.length-1){s.append(arr[i]).append(", ");}else {s.append(arr[i]);}}s.append("]");String rs = s.toString();return rs;}
}
StringJoiner
- JDK8开始才有的,跟StringBuilder一样,也是用来操作字符串的,也可以看成是一个容器,创建之后里面的内容是可变的。
- 好处:不仅提高字符串的操作效率,并且在有些场景下使用它操字符串,代码会更加简洁。
import java.util.StringJoiner;public class Test {public static void main(String[] args) {// 目标:掌握StringJoiner的使用//StringJoiner s = new StringJoiner(", "); // 间隔符 输出:java1, java2, java3//间隔符 开始符 结束符StringJoiner s = new StringJoiner(", ","[","]"); //输出:[java1, java2, java3]s.add("java1");s.add("java2");s.add("java3");System.out.println(s);}
}