5.2 StringBuffer和StringBuilder

系列 - Java API
目录
本手册介绍了Java中StringBuffer和StringBuilder的用法,包括如何添加、删除和修改字符串内容。同时,通过一个模拟订单号生成案例,展示了String、StringBuffer和StringBuilder在效率上的差异,并要求学生补全代码,分别用String和StringBuffer实现订单号的生成。
任务
任务一:StringBuffer
public class Example08 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
System.out.println("1、添加------------------------");
add(sb);
System.out.println("2、删除------------------------");
remove(sb);
System.out.println("3、修改------------------------");
alter();
}
public static void add(StringBuffer sb) {
sb.append("我王小明");
System.out.println("append添加结果:" + sb);
sb.insert(1, "的名字是");
System.out.println("insert添加结果:" + sb);
sb.append("白");
System.out.println("append添加结果:" + sb);
}
public static void alter() {
StringBuffer sb = new StringBuffer("我的性别是王小白");
sb.replace(2, 4, "姓名");
System.out.println("替换指定位置字符串:" + sb);
sb.setCharAt(0, '你');
System.out.println("修改指定位置字符:" + sb);
System.out.println("翻转:" + sb.reverse());
}
public static void remove(StringBuffer sb) {
sb.delete(0, 5);
System.out.println("delete的结果:" + sb);
sb.deleteCharAt(3);
System.out.println("deleteCharAt结果:" + sb);
sb.delete(0, sb.length());
System.out.println("清空:" + sb);
}
}
任务二:StringBuilder
public class Example09 {
private static final int TIMES = 100000;
public static void main(String[] args) {
testString();
testStringBuffer();
testStringBuilder();
}
// String时间效率
public static void testString() {
long start = System.currentTimeMillis();
String str = "";
for (int i = 0; i < TIMES; i++) {
str += "test";
}
long end = System.currentTimeMillis();
System.out.println("String测试耗时:" + (end - start) + "ms");
}
// StringBuffer时间效率(线程安全)
public static void testStringBuffer() {
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < TIMES; i++) {
sb.append("test");
}
long end = System.currentTimeMillis();
System.out.println("StringBuffer测试耗时:" + (end - start) + "ms");
}
// StringBuilder时间效率(非线程安全)
public static void testStringBuilder() {
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("hello");
for (int i = 0; i < TIMES; i++) {
sb.append("test");
}
long end = System.currentTimeMillis();
System.out.println("StringBuilder测试耗时:" + (end - start) + "ms");
}
}
作业
模拟订单号生成(补全代码)
在超市购物时,小票上都会有一个订单号,而且每个订单号都是唯一的。
本例要求编写一个程序,模拟订单系统中订单号的生成。在生成订单号时,使用年月日和时间组合生成唯一订单号。
例如,给定一个包括年月日以及时间的数组arr={2024,1107,1040}
,将其拼接成字符串OID:[202005041101]
,作为一个订单号。
运行截图:
要求:
补全下面的代码,分别使用 String 和 StringBuffer 实现上面的功能。
public class OrderID {
public static void main(String[] args) {
System.out.println("====String实现====");
int[] time = {2024, 1107, 1040};
String orderID = arrayToString(time);
System.out.println("订单号 " + orderID);
System.out.println("\n====StringBuffer实现====");
int[] time2 = {2023, 1006, 1200};
String orderID2 = arrayToString(time2);
System.out.println("订单号 " + orderID2);
}
/**
* 将数组拼接成字符串,并在首尾添加`OID:[]`
* 注意:使用String实现
* @param arr 存放数字的数组
* @return 拼接后的字符串,格式为`[202411071040]`
*/
public static String arrayToString(int[] arr) {
}
/**
* 将数组拼接成字符串,并在首尾添加`OID:[]`
* 注:使用StringBuffer实现
* @param arr 存放数字的数组
* @return 拼接后的字符串,格式为`[202411071040]`
*/
public static String arrayToStringUsingBuffer(int[] arr) {
}
}