花几千上万学习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;一个自称“会…

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…

UE4-字体导入

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

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

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

【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 相对…

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

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

快速上手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、…

Java程序的故障排查

文章目录 Linux命令关机/重启/注销系统信息和性能查看磁盘和分区⽤户和⽤户组⽹络和进程管理常⻅系统服务命令⽂件和⽬录操作⽂件查看和处理打包和解压RPM包管理命令YUM包管理命令DPKG包管理命令APT软件⼯具 JDK命令jpsjstatjinfojmapjhatjstackjcmdjconsole 分析工具VisualVME…

自动驾驶-预测概览

通过生成一条路径来预测一个物体的行为&#xff0c;在每一个时间段内&#xff0c;为每一辆汽车重新计算预测他们新生成的路径&#xff0c;这些预测路径为规划阶段做出决策提供了必要信息 预测路径有实时性的要求&#xff0c;预测模块能够学习新的行为。我们可以使用多源的数据…

超简单安装指定版本的clickhouse

超简单安装指定版本的clickhouse 命令执行shell脚本 idea连接 命令执行 参考官网 # 下载脚本 wget https://raw.githubusercontent.com/183461750/doc-record/d988dced891d70b23c153a3bbfecee67902a3757/middleware/data/clickhouse/clickhouse-install.sh # 执行安装脚本(中…

【漏洞复现】Netgear WN604 downloadFile.php 信息泄露漏洞(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR&#xff08;网件&#xff09;公司生产的无线接入器&#xff08;或无线路由器&#xff09;提供Wi-Fi保护协议&#xff08;WPA2-PSK, WPA-PSK&#xff09;&#xff0c;以及有线等效加密&#xff08;WEP&#xff09;64位、128位和152…

亲测--linux下安装ffmpeg最新版本---详细教程

下载地址 Download FFmpeg 下载最新的https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.xz 上传到服务器 解压 tar xvf ffmpeg-7.0.1.tar.xz 编译 cd ffmpeg-7.0.1 ./configure --prefix=/usr/local/ffmpeg make && make install 报错: 解决:在后面加 跳过检测…

【Word】——小技巧

1.PDF相关转换word PDF转换成Word在线转换器 - 免费 - CleverPDF 2. word插入公式 1.软件推荐&#xff08;免费&#xff09; 可直接将图片&#xff0c;截屏公式转为word标准规范形式 2.网址推荐 在线LaTeX公式编辑器-编辑器 &#xff08;每天有免费使次数&#xff09; 3.…

Matlab演示三维坐标系旋转

function showTwo3DCoordinateSystemsWithAngleDifference() clear all close all % 第一个三维坐标系 origin1 [0 0 0]; x_axis1 [1 0 0]; y_axis1 [0 1 0]; z_axis1 [0 0 1];% 绕 x 轴旋转 30 度的旋转矩阵 theta_x 30 * pi / 180; rotation_matrix_x [1 0 0; 0 cos(th…

Linux服务器配置Python+PyTorch+CUDA深度学习环境

参考博主 Linux服务器配置PythonPyTorchCUDA深度学习环境_linux cuda环境配置-CSDN博客 https://blog.csdn.net/NSJim/article/details/115386936?ops_request_misc&request_id&biz_id102&utm_termlinux%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83%E6%8C%89pytorch%20…

4核16G服务器支持多少人?4C16G服务器性能测评

租赁4核16G服务器费用&#xff0c;目前4核16G服务器10M带宽配置70元1个月、210元3个月&#xff0c;那么能如何呢&#xff1f;配置为ECS经济型e实例4核16G、按固定带宽10Mbs、100GB ESSD Entry系统盘。 那么问题来了&#xff0c;4C16G10M带宽的云服务器可以支持多少人同时在线&…

C++ ───List的使用

目录 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&…

2024年汉字小达人比赛区级活动学校选拔的题型预测和真题示例

上一篇文章&#xff0c;好真题网为大家介绍了2024年上海市小学生汉字小达人比赛活动的轮次、举办日期、参赛对象、报名方式、费用和如何备考的建议等。 有家长朋友问汉字小达人考试的内容和范围是什么&#xff0c;有哪些题型&#xff0c;以及汉字小达人比赛和上海市小学生古诗…

PDF压缩软件电脑版 电脑pdf压缩怎么压缩文件

在数字化时代&#xff0c;pdf文件因其良好的兼容性和稳定性&#xff0c;已成为工作与生活中不可或缺的文件格式。然而&#xff0c;随着内容的增多&#xff0c;pdf文件的体积也随之增大&#xff0c;给文件的传输和存储带来了一定的困扰。本文将为你详细介绍如何在电脑上压缩pdf文…