5.2 StringBuffer和StringBuilder

系列 - Java API

本手册介绍了Java中StringBuffer和StringBuilder的用法,包括如何添加、删除和修改字符串内容。同时,通过一个模拟订单号生成案例,展示了String、StringBuffer和StringBuilder在效率上的差异,并要求学生补全代码,分别用String和StringBuffer实现订单号的生成。

java

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);  
    }  
}

java

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 实现上面的功能。

java

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) {  
          
    }  
}

相关内容