Compare commits
4 Commits
a86d757053
...
00a5c68f22
Author | SHA1 | Date | |
---|---|---|---|
00a5c68f22 | |||
8f3a52c938 | |||
e645d37dad | |||
02bb45886d |
48
src/chapter5/Example08.java
Normal file
48
src/chapter5/Example08.java
Normal file
@ -0,0 +1,48 @@
|
||||
package chapter5;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
59
src/chapter5/Example09.java
Normal file
59
src/chapter5/Example09.java
Normal file
@ -0,0 +1,59 @@
|
||||
package chapter5;
|
||||
|
||||
public class Example09 {
|
||||
private static final int TIMES = 100000;
|
||||
|
||||
public static void main(String[] args) {
|
||||
testString();
|
||||
testStringBuffer();
|
||||
testStringBuilder();
|
||||
test();
|
||||
}
|
||||
|
||||
// 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");
|
||||
}
|
||||
|
||||
public static void test() {
|
||||
String s1 = new String("abc");
|
||||
String s2 = new String("abc");
|
||||
System.out.println(s1.equals(s2)); // 打印结果为true
|
||||
StringBuffer sb1 = new StringBuffer("abc");
|
||||
StringBuffer sb2 = new StringBuffer("abc");
|
||||
System.out.println(sb1.equals(sb2)); // 打印结果为false
|
||||
StringBuilder sbr1=new StringBuilder("abc");
|
||||
StringBuilder sbr2=new StringBuilder("abc");
|
||||
System.out.println(sbr1.equals(sbr2)); // 打印结果为false
|
||||
|
||||
}
|
||||
|
||||
}
|
132
src/chapter5/ShoppingCart.java
Normal file
132
src/chapter5/ShoppingCart.java
Normal file
@ -0,0 +1,132 @@
|
||||
package chapter5;
|
||||
|
||||
/**
|
||||
* 双十一购物车
|
||||
* 需求:
|
||||
* 1. 添加商品到购物车(商品名称用StringBuilder拼接)
|
||||
* 2. 显示购物车商品清单(把StringBuilder转换为String输出)
|
||||
* 3. 修改商品名称(用String的replace方法)
|
||||
* 4. 删除购物车某个商品(用StringBuilder的delete方法)
|
||||
* 5. 计算购物车商品总价
|
||||
*/
|
||||
public class ShoppingCart {
|
||||
private StringBuilder cart; // 购物车商品列表
|
||||
private double totalPrice; // 总价格
|
||||
|
||||
/**
|
||||
* 构造方法思路:
|
||||
* 1. 创建空的购物车,使用StringBuilder存储商品信息
|
||||
* 2. 初始化总价为0
|
||||
* 为什么使用StringBuilder?因为购物车内容会经常变动,StringBuilder更适合频繁修改
|
||||
*/
|
||||
public ShoppingCart() {
|
||||
cart = new StringBuilder();
|
||||
totalPrice = 0.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* addItem方法思路:
|
||||
* 1. 判断购物车是否为空
|
||||
* - 如果不空,需要先添加分隔符", "
|
||||
* - 如果是空的,直接添加商品
|
||||
* 2. 拼接商品信息:商品名(¥价格)
|
||||
* 例如:小米手机(¥1999.0)
|
||||
* 3. 更新总价
|
||||
*
|
||||
* 考虑:为什么要加if判断?
|
||||
* - 为了避免第一个商品前也加逗号
|
||||
* - 让商品列表更美观:商品1(¥xx), 商品2(¥xx), 商品3(¥xx)
|
||||
*/
|
||||
public void addItem(String item, double price) {
|
||||
if (!cart.isEmpty()) {
|
||||
cart.append(", ");
|
||||
}
|
||||
cart.append(item).append("(¥").append(price).append(")");
|
||||
totalPrice += price;
|
||||
}
|
||||
|
||||
/**
|
||||
* showCart方法思路:
|
||||
* 1. 先判断购物车是否为空
|
||||
* - 如果为空,返回提示信息
|
||||
* - 如果不为空,显示商品清单和总价
|
||||
* 2. 把StringBuilder转换为String返回
|
||||
*
|
||||
* 为什么要转换成String?
|
||||
* - String更适合显示最终结果
|
||||
* - println方法接收String类型参数
|
||||
*/
|
||||
public String showCart() {
|
||||
if (cart.isEmpty()) {
|
||||
return "购物车是空的呢,快去选购吧!";
|
||||
}
|
||||
return "购物车商品: " + cart.toString() + "\n总价: ¥" + totalPrice;
|
||||
}
|
||||
|
||||
/**
|
||||
* modifyItem方法思路:
|
||||
* 1. 先将StringBuilder转换为String
|
||||
* 2. 使用String的replace方法替换商品名
|
||||
* 3. 将修改后的String再转回StringBuilder
|
||||
*
|
||||
* 为什么要转换来转换去?
|
||||
* - String的replace方法使用更方便
|
||||
* - StringBuilder没有直接的替换方法
|
||||
* 注意:这里没有修改价格,实际项目中可能需要考虑价格变化
|
||||
*/
|
||||
public void modifyItem(String oldItem, String newItem) {
|
||||
String cartStr = cart.toString();
|
||||
cartStr = cartStr.replace(oldItem, newItem);
|
||||
cart = new StringBuilder(cartStr);
|
||||
}
|
||||
|
||||
/**
|
||||
* removeItem方法思路:
|
||||
* 1. 找到要删除商品名的起始位置(indexOf)
|
||||
* 2. 如果找到了(start != -1):
|
||||
* - 找到这个商品信息的结束位置(")"的位置再+1)
|
||||
* - 如果后面还有商品,则多删除", "这两个字符
|
||||
* 3. 使用StringBuilder的delete方法删除
|
||||
* 4. 更新总价
|
||||
*
|
||||
* 难点解析:
|
||||
* end < cart.length() && cart.charAt(end) == ','
|
||||
* - 为什么要判断end < cart.length()?避免数组越界
|
||||
* - 为什么要判断逗号?确保后面还有其他商品
|
||||
*/
|
||||
public void removeItem(String item, double price) {
|
||||
int start = cart.indexOf(item);
|
||||
if (start != -1) {
|
||||
int end = cart.indexOf(")", start) + 1;
|
||||
if (end < cart.length() && cart.charAt(end) == ',') {
|
||||
end += 2; // 删除后面的逗号和空格
|
||||
}
|
||||
cart.delete(start, end);
|
||||
totalPrice -= price;
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 测试购物车
|
||||
ShoppingCart cart = new ShoppingCart();
|
||||
System.out.println(cart.showCart());
|
||||
System.out.println();
|
||||
|
||||
// 添加商品
|
||||
cart.addItem("小米手机", 1999.0);
|
||||
cart.addItem("耳机", 299.0);
|
||||
cart.addItem("充电器", 39.9);
|
||||
System.out.println("添加商品后:");
|
||||
System.out.println(cart.showCart());
|
||||
|
||||
// 修改商品名称
|
||||
cart.modifyItem("小米手机", "华为手机");
|
||||
System.out.println("\n修改商品后:");
|
||||
System.out.println(cart.showCart());
|
||||
|
||||
// 删除商品
|
||||
cart.removeItem("耳机", 299.0);
|
||||
System.out.println("\n删除商品后:");
|
||||
System.out.println(cart.showCart());
|
||||
}
|
||||
}
|
47
src/chapter5/demo51/OrderID.java
Normal file
47
src/chapter5/demo51/OrderID.java
Normal file
@ -0,0 +1,47 @@
|
||||
package chapter5.demo51;
|
||||
|
||||
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) {
|
||||
String s = "";
|
||||
s += "OID:[";
|
||||
for (int c : arr) {
|
||||
s += c;
|
||||
}
|
||||
s += ']';
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将数组拼接成字符串,并在首尾添加`OID:[]`
|
||||
* 注:使用StringBuffer实现
|
||||
* @param arr 存放数字的数组
|
||||
* @return 拼接后的字符串,格式为`[202411071040]`
|
||||
*/
|
||||
public static String arrayToStringUsingBuffer(int[] arr) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("OID:[");
|
||||
for (int c : arr) {
|
||||
sb.append(c);
|
||||
}
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user