花几千上万学习Java,真没必要!(十九)

1、StringBuilder:

测试代码1:

package stringbuilder.com;
import java.util.ArrayList;  
import java.util.List;  public class StringBuilderExample {  public static void main(String[] args) {  // 初始化StringBuilder  StringBuilder sb = new StringBuilder("This is a complex example using StringBuilder. ");  // 添加不同类型的数据  sb.append("It demonstrates ").append(42).append(" different operations. ");  // 使用循环构建字符串  List<String> items = new ArrayList<>();  items.add("Item 1");  items.add("Item 2");  items.add("Item 3");  sb.append("The list contains: ");  for (String item : items) {  sb.append(item).append(", ");  }  // 移除最后一个逗号和空格  if (sb.length() > 0 && sb.charAt(sb.length() - 1) == ',') {  sb.setLength(sb.length() - 2); // 移除逗号和空格  }  // 反转部分字符串  String partialString = sb.substring(0, sb.indexOf("list contains:") + "list contains:".length()).trim();  StringBuilder reversedPartial = new StringBuilder(partialString).reverse();  // 在StringBuilder中插入反转后的部分字符串  sb.insert(0, "Reversed partial: ").insert(0, reversedPartial).append("\n");  // 转换并打印结果  System.out.println(sb.toString());  // 字符串与另一个StringBuilder合并  StringBuilder anotherSb = new StringBuilder("Additional information: ");  anotherSb.append("This is more data to be appended.");  // 合并两个StringBuilder  sb.append(anotherSb);  // 打印最终结果  System.out.println(sb.toString());  }  
}

运行结果如下:

测试代码2:

package stringbuilder.com;
import java.time.LocalDateTime;  
import java.time.format.DateTimeFormatter;  
import java.util.HashMap;  
import java.util.HashSet;  
import java.util.Map;  
import java.util.Set;  public class StringBuilderTest {  private enum LogLevel {  DEBUG, INFO, WARN, ERROR  }  private static final Map<LogLevel, Set<String>> logMessages = new HashMap<>();  static {  // 初始化日志级别集合  for (LogLevel level : LogLevel.values()) {  logMessages.put(level, new HashSet<>());  }  }  public static void main(String[] args) {  // 日志记录  log(LogLevel.INFO, "System starting up...");  log(LogLevel.DEBUG, "Initializing configuration...");  log(LogLevel.WARN, "Old configuration file found, using defaults.");  log(LogLevel.ERROR, "Failed to connect to database!");  // WARN和ERROR级别的日志  printLogs(LogLevel.WARN, LogLevel.ERROR);  // 使用StringBuilder构建更复杂的日志消息  StringBuilder complexMessage = buildComplexLogMessage("UserActivity", "user123", LogLevel.INFO, "Logged in successfully.");  log(complexMessage);  // 打印所有WARN和ERROR级别的日志,包括新添加的  printLogs(LogLevel.WARN, LogLevel.ERROR);  }  public static void log(LogLevel level, String message) {  logMessages.get(level).add(formatLogMessage(level, message));  }  public static void log(StringBuilder message) {  // INFO级别的日志log(LogLevel.INFO, message.toString());  }  private static String formatLogMessage(LogLevel level, String message) {  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");  return String.format("[%s] [%s] %s", formatter.format(LocalDateTime.now()), level.name(), message);  }  public static void printLogs(LogLevel... levels) {  for (LogLevel level : levels) {  System.out.println("--- " + level.name() + " LOGS ---");  for (String msg : logMessages.getOrDefault(level, Set.of())) {  System.out.println(msg);  }  if (logMessages.getOrDefault(level, Set.of()).isEmpty()) {  System.out.println("No " + level.name() + " logs found.");  }  }  }  public static StringBuilder buildComplexLogMessage(String category, String user, LogLevel level, String message) {  StringBuilder sb = new StringBuilder();  sb.append("[")  .append(category)  .append("]")  .append(" [")  .append(user)  .append("]")  .append(" [")  .append(level.name())  .append("] ")  .append(message);  // 额外的系统信息  if (level == LogLevel.ERROR) {  sb.append(" [System Info: Memory Usage High]");  }  return sb;  }  
}

运行结果如下:

测试代码3:

package stringbuilder.com;
public class ComplexStringBuilderTest {  @SuppressWarnings("unused")public static void main(String[] args) {  // 用户活动记录中的信息  String userId = "U12345";  String userName = "John Doe";  String activityType = "Login";  String ipAddress = "192.168.1.1";  boolean isSuccess = true;  String errorMessage = null; // 假设登录成功,没有错误信息  String additionalInfo = "User logged in from a trusted IP.";  // 初始化StringBuilder构建日志消息  StringBuilder logMessage = new StringBuilder();  // 添加基础信息  logMessage.append("Log Entry for User ").append(userId).append(" (").append(userName).append("):\n");  logMessage.append("Activity Type: ").append(activityType).append("\n");  logMessage.append("IP Address: ").append(ipAddress).append("\n");  // 根据是否成功添加不同的信息  if (isSuccess) {  logMessage.append("Activity Result: Success\n");  } else {  logMessage.append("Activity Result: Failed\n");  if (errorMessage != null && !errorMessage.isEmpty())logMessage.append("Error Message: ").append(errorMessage).append("\n");  }  // 添加附加信息  if (additionalInfo != null && !additionalInfo.isEmpty()) {  logMessage.append("Additional Information: ").append(additionalInfo).append("\n");  }  // 记录活动发生的时间  String timestamp = "2023-04-01T12:34:56Z";  logMessage.append("Timestamp: ").append(timestamp).append("\n");  // 输出构建的日志消息  System.out.println(logMessage.toString());  }  
}

运行结果如下:

测试代码4:

package stringbuilder.com;
public class OrderInfoBuilder {  public static void main(String[] args) {  // 订单数据  String orderId = "O00123456";  String customerName = "John Doe";  String customerEmail = "john.doe@example.com";  double totalAmount = 199.99;  // 订单包含多个商品  Product product1 = new Product("Product A", 1, 99.99);  Product product2 = new Product("Product B", 2, 50.00);  Product[] products = {product1, product2};  // 使用StringBuilder构建订单信息  StringBuilder orderInfo = buildOrderInfo(orderId, customerName, customerEmail, totalAmount, products);  // 输出订单信息  System.out.println(orderInfo.toString());  }  public static StringBuilder buildOrderInfo(String orderId, String customerName, String customerEmail, double totalAmount, Product[] products) {  StringBuilder sb = new StringBuilder();  // 添加订单基本信息  sb.append("Order Information:\n");  sb.append("Order ID: ").append(orderId).append("\n");  sb.append("Customer Name: ").append(customerName).append("\n");  sb.append("Customer Email: ").append(customerEmail).append("\n");  sb.append("Total Amount: $").append(String.format("%.2f", totalAmount)).append("\n");  // 添加商品列表  sb.append("\nItems in Order:\n");  for (Product product : products) {  sb.append(String.format(" - %s (Quantity: %d, Price: $%.2f)\n",   product.getName(), product.getQuantity(), product.getPrice()));  }  // 订单处理的额外信息  String processingStatus = "Processing";  String shippingAddress = "1234 Main St, Anytown, USA";  // 订单处理状态  sb.append("\nOrder Processing Status: ").append(processingStatus).append("\n");  // 配送地址  if (shippingAddress != null && !shippingAddress.isEmpty()) {  sb.append("Shipping Address: ").append(shippingAddress).append("\n");  }  // 订单备注信息String remarks = ""; // 来自用户输入或数据库  // 订单备注if (remarks != null && !remarks.isEmpty()) {  sb.append("\nOrder Remarks: ").append(remarks).append("\n");  }  // 时间戳  String timestamp = "2023-04-01T12:34:56Z";  sb.append("\nOrder Timestamp: ").append(timestamp).append("\n");  return sb;  }  // 订单中的商品类  static class Product {  private String name;  private int quantity;  private double price;  public Product(String name, int quantity, double price) {  this.name = name;  this.quantity = quantity;  this.price = price;  }  public String getName() {  return name;  }  public int getQuantity() {  return quantity;  }  public double getPrice() {  return price;  }  }  
}

运行结果如下: 

2、 StringBuilder与StringBuffer的区别:

测试代码:

package stringbuilder.com;
public class ThreadSafetyDemo {public static void main(String[] args) {//使用StringBuilder(非线程安全)//创建两个线程(thread1和thread2),它们同时尝试向同一个StringBuilder实例追加内容。//由于StringBuilder不是线程安全的,这两个线程可能会相互干扰,导致最终的字符串内容不可预测。//StringBuilder的输出是乱序的。StringBuilder sbNonThreadSafe = new StringBuilder();Thread thread1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {sbNonThreadSafe.append("Thread 1: ");sbNonThreadSafe.append(i);sbNonThreadSafe.append("\n");}});Thread thread2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {sbNonThreadSafe.append("Thread 2: ");sbNonThreadSafe.append(i);sbNonThreadSafe.append("\n");}});thread1.start();thread2.start();try {thread1.join();thread2.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("StringBuilder result (may be unpredictable):");System.out.println(sbNonThreadSafe.toString());// 使用StringBuffer(线程安全)//创建了两个新的线程(thread3和thread4),使用StringBuffer实例。//StringBuffer是线程安全的,即使两个线程同时尝试修改它,最终的字符串内容也将是可预测的。//每个线程将按顺序追加其内容,而不会出现内容错乱的情况。//StringBuffer的输出是有序。StringBuffer sbThreadSafe = new StringBuffer();Thread thread3 = new Thread(() -> {for (int i = 0; i < 1000; i++) {sbThreadSafe.append("Thread 3: ");sbThreadSafe.append(i);sbThreadSafe.append("\n");}});Thread thread4 = new Thread(() -> {for (int i = 0; i < 1000; i++) {sbThreadSafe.append("Thread 4: ");sbThreadSafe.append(i);sbThreadSafe.append("\n");}});thread3.start();thread4.start();try {thread3.join();thread4.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("\nStringBuffer result (predictable):");System.out.println(sbThreadSafe.toString());}
}

 运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯会议产品策划的成长之路:从万字文档到功能落地的实战经验

腾讯会议产品策划的成长之路&#xff1a;从万字文档到功能落地的实战经验 在腾讯会议的产品团队中&#xff0c;有这样一位产品策划&#xff0c;他以其出色的逻辑思维、全局观念以及扎实的执行力&#xff0c;在团队中发挥着举足轻重的作用。他就是林陪同&#xff0c;一个自称“会…

css font 优化

文章目录 使用 font-display 控制字体加载预加载关键字体选择合适的字体文件类型按需创建字体文件HTTP 缓存优化 使用 font-display 控制字体加载 避免字体加载导致的空白 block&#xff1a;浏览器在短暂的阻塞期内不显示任何文本&#xff0c;直到字体加载完成。这可能导致页…

JAVA进阶学习12

文章目录 一、File类1.1 File对象的构造1.2 File对象的常见方法判断功能的方法获取功能的方法绝对路径和相对路径创建删除功能的方法 1.3 File的常用遍历方法1.4 File获取并遍历的其他方法1.5 用法举例二、IO流2.1 IO的分类2.2 字节流的方法概述2.2.1 FileOutputStream2.2.2 Fi…

如何配置Memcached以减少对数据库的直接访问

如何配置Memcached以减少对数据库的直接访问 1. 引言 在现代应用程序中&#xff0c;数据库通常是性能瓶颈的主要来源之一。通过使用Memcached&#xff0c;开发者可以显著减少数据库的负载&#xff0c;提高应用程序的响应速度。本文将详细介绍如何配置Memcached&#xff0c;以…

UE4-字体导入

一.字体导入 方法一&#xff1a; 然后通过导入将自己想要的字体导入到项目中&#xff0c;也可以直接将我们放在桌面的字体直接拖入到我们的内容浏览器中。 但是要注意想要发售游戏的话不可以这样导入微软的字体&#xff0c;因为Windows自带基本都有版权&#xff0c;所以最…

odoo17创建一个默认UI视图

XML 数据文件 当要加载的数据具有简单格式时&#xff0c;CSV 格式很方便。当格式更复杂时&#xff08;例如&#xff0c;加载视图或电子邮件模板的结构&#xff09;&#xff0c;我们使用 XML 格式。例如&#xff0c;此帮助字段包含 HTML 标记。虽然可以通过 CSV 文件加载此类…

明星应援系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;线上应援管理&#xff0c;线下应援管理&#xff0c;应援物品管理&#xff0c;购买订单管理&#xff0c;集资应援管理&#xff0c;集资订单管理&#xff0c;市集订单管理&#xff0…

极致竞争思维

老板请了几个毕业生&#xff0c;培训了一年&#xff0c;他们现在对业务的熟悉程度比我都熟悉多了&#xff0c;只是基本功不扎实&#xff0c;做出来的东西有很多问题。 老板请我来&#xff0c;给了我一个硬件总监的位置&#xff0c;实际上是要对他的整个系统做出诊断。 也是难为…

【QT】线程控制和同步

目录 概述 QThread常用API 线程使用 创建一个QThread的子类 主线程启动线程 线程安全 互斥锁 QMutex 使用示例&#xff1a;两个线程一个共享静态变量进行 线程子类创建 主线程调用 QMutexLocker 条件变量 信号量 概述 在 Qt 中&#xff0c;多线程的处理⼀般是…

【CSS in Depth 2 精译_020】3.3 元素的高度

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

【proteus经典实战】定时器控制交通灯指示灯

一、简介 基于8051系列单片机实现&#xff0c;旨在模拟一个简单的交通灯系统&#xff0c;实现红、黄、绿灯的交替亮灭。使用了特殊功能寄存器&#xff08;SFR&#xff09;和位操作来控制硬件&#xff0c;使用定时器0的中断功能来控制交通灯信号的切换。通过软件控制&#xff0…

解决selenium打印保存为PDF时图片未加载成功的问题

使用selenium打印网页时&#xff0c;如果程序运行很快的话&#xff0c;可能会导致图片没有加载成功即进行了保存&#xff0c;出现这个问题最初的思考是在执行打印任务时使用js进行强制等待&#xff0c;后发现实现效果并不好。在加载页面时使用自动下滑的方式将网页拉到底&#…

uniapp动态计算并设置元素高度

<template><view><scroll-view id"sv-box" :scroll-y"true" :style"{height:navHeightpx}"></scroll-view><view id"btn-box"><button>取消</button><button>确认</button><…

Linux Vim教程(三):插入模式与命令模式

目录 1. Vim的基本模式介绍 2. 插入模式 2.1 进入插入模式 2.2 退出插入模式 2.3 插入模式下的快捷键 2.4 插入模式中的光标移动 3. 命令模式 3.1 进入命令模式 3.2 常用命令 3.3 搜索和替换 3.4 其他有用的命令 3.5 配置与优化 3.5.1 自动补全 3.5.2 自定义快捷…

【前后端联调】HttpMessageNotReadableException

【前后端联调】HttpMessageNotReadableException 01 问题描述 在前后端联调时产生的问题&#xff0c;关键是下面这句翻译JSON解析错误&#xff1a;无法构造“java.util.ArrayList”的实例 org.springframework.http.converter.HttpMessageNotReadableException: JSON parse …

记录贴-NGINX相关

链接: NGINX相关配置信息说明

在 CI/CD 中怎么使用 Docker 部署前端项目?

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&#xff0c;即可获取。 前言 在上一篇文…

Web Pages 表单

Web Pages 表单 介绍 Web pages 表单是现代网页设计中不可或缺的组成部分&#xff0c;它们允许用户与网站进行交互&#xff0c;提交信息&#xff0c;如注册、登录、反馈、预订等。表单的设计和功能对用户体验和网站的业务目标有着直接的影响。本文将深入探讨Web pages表单的各…

快速上手AI指令:打造个性化智能交互体验的全面指南

快速上手AI指令&#xff1a;打造个性化智能交互体验的全面指南 一、初识文心一言1.1 文心一言简介1.2 文心一言的特点 二、准备工作2.1 获取访问权限2.2 熟悉界面布局2.3 了解基础指令 三、基础指令操作3.1 问答互动3.2 文本创作3.3 任务规划 四、进阶指令操作4.1 复杂查询4.2 …

Python酷库之旅-第三方库Pandas(035)

目录 一、用法精讲 106、pandas.Series.iloc方法 106-1、语法 106-2、参数 106-3、功能 106-4、返回值 106-5、说明 106-6、用法 106-6-1、数据准备 106-6-2、代码示例 106-6-3、结果输出 107、pandas.Series.__iter__魔法方法 107-1、语法 107-2、参数 107-3、…