Compare commits
No commits in common. "00a5c68f2254620fd58252fd2224222ec5515e03" and "a86d75705344a9c9a375be52d00d3abf226d9ca9" have entirely different histories.
00a5c68f22
...
a86d757053
@ -1,48 +0,0 @@
|
|||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,59 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,132 +0,0 @@
|
|||||||
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());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
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