除了`String`、`StringBuffer` 和 `StringBuilder`之外,还有什么处理字符串的方法?

一、标准库中的字符串处理类

1. StringJoiner(Java 8+)
  • 用途:用于在拼接字符串时自动添加分隔符、前缀和后缀。
  • 示例
    StringJoiner sj = new StringJoiner(", ", "[", "]");
    sj.add("A").add("B").add("C");
    System.out.println(sj.toString()); // 输出:[A, B, C]
    
  • 适用场景:集合元素拼接、日志格式化等。
2. StringTokenizer(旧版类)
  • 用途:分割字符串(类似 String.split(),但性能更高,功能更简单)。
  • 示例
    StringTokenizer st = new StringTokenizer("Hello,World,Java", ",");
    while (st.hasMoreTokens()) {System.out.println(st.nextToken());
    }
    
  • 注意:Java 5+ 推荐使用 String.split() 或正则表达式。
3. CharArrayWriter
  • 用途:将字符写入内存缓冲区(基于 char[]),最后转换为字符串。
  • 示例
    CharArrayWriter writer = new CharArrayWriter();
    writer.write("Hello");
    writer.write(" World");
    String result = writer.toString(); // Hello World
    
  • 适用场景:替代 StringBuilder 处理字符流。
4. CharBuffer(NIO 类)
  • 用途:用于高效处理字符缓冲区的读写操作,支持内存映射等高级特性。
  • 示例
    CharBuffer buffer = CharBuffer.allocate(100);
    buffer.put("Hello").flip();
    String s = buffer.toString(); // Hello
    
  • 适用场景:高性能 I/O 或大规模字符处理。

二、字符串工具方法(String 类的扩展)

1. String.format()System.out.printf()
  • 用途:格式化字符串(类似 C 语言的 printf)。
  • 示例
    String s = String.format("Name: %s, Age: %d", "Alice", 30);
    
2. String.join()(Java 8+)
  • 用途:用分隔符拼接字符串集合。
  • 示例
    List<String> list = List.of("A", "B", "C");
    String joined = String.join(" | ", list); // A | B | C
    
3. String.repeat()(Java 11+)
  • 用途:重复字符串多次。
  • 示例
    String s = "Java".repeat(3); // JavaJavaJava
    
4. 文本块(Text Blocks,Java 15+)
  • 用途:简化多行字符串的定义。
  • 示例
    String json = """{"name": "Alice","age": 30}""";
    

三、正则表达式相关类

1. PatternMatcher
  • 用途:通过正则表达式匹配、替换或分割字符串。
  • 示例
    Pattern pattern = Pattern.compile("\\d+");
    Matcher matcher = pattern.matcher("abc123def");
    while (matcher.find()) {System.out.println(matcher.group()); // 123
    }
    

四、第三方库工具

1. Apache Commons Lang - StringUtils
  • 常用方法
    StringUtils.isEmpty(str);        // 判空
    StringUtils.join(list, ",");     // 拼接集合
    StringUtils.substringBetween(str, "[", "]"); // 提取子串
    
  • 依赖:需引入 commons-lang3
2. Guava - Strings
  • 常用方法
    Strings.padStart("Java", 6, ' '); // "  Java"
    Strings.nullToEmpty(str);        // 将 null 转为空字符串
    

五、底层优化特性

Compact Strings(Java 9+)
  • 改进String 内部存储从 char[] 改为 byte[],根据字符编码(Latin-1 或 UTF-16)动态优化内存占用。
  • 效果:减少内存消耗,尤其对纯英文字符串(节省约 50% 内存)。

总结

Java 中处理字符串的方式多样,可根据场景选择:

场景推荐工具
简单拼接String+ 操作符(编译器优化)
高频修改StringBuilder(单线程)
多线程安全修改StringBuffer(锁消除优化后接近)
格式化拼接StringJoinerString.format()
集合拼接String.join() 或 Stream API
复杂文本处理正则表达式(Pattern/Matcher
高性能 I/O 或缓冲区操作CharBuffer(NIO)
多行字符串文本块(Java 15+)

对于第三方库,可根据项目需求选择 StringUtils(Apache)或 Strings(Guava)简化代码。

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

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

相关文章

Qt中读写结构体字节数据

在Qt中读写结构体字节数据通常涉及将结构体转换为字节数组(QByteArray)或直接从内存中读写。以下是几种常见方法&#xff1a; 方法1&#xff1a;使用QDataStream读写结构体 cpp #include <QFile> #include <QDataStream>// 定义结构体 #pragma pack(push, 1) //…

Windows 10 上安装 Spring Boot CLI详细步骤

在 Windows 10 上安装 Spring Boot CLI 可以通过以下几种方式完成。以下是详细的步骤说明&#xff1a; 1. 手动安装&#xff08;推荐&#xff09; 步骤 1&#xff1a;下载 Spring Boot CLI 访问 Spring Boot CLI 官方发布页面。下载最新版本的 .zip 文件&#xff08;例如 sp…

Unity3D仿星露谷物语开发37之浇水动画

1、目标 当点击水壶时&#xff0c;实现浇水的动画。同时有一个水从水壶中流出来的特效。 假如某个grid被浇过了&#xff0c;则不能再浇水了。。 如果某个grid没有被dug过&#xff0c;也不能被浇水。 2、优化Settings.cs脚本 增加如下内容&#xff1a; public static float…

【2】Kubernetes 架构总览

Kubernetes 架构总览 主节点与工作节点 主节点 Kubernetes 的主节点&#xff08;Master&#xff09;是组成集群控制平面的关键部分&#xff0c;负责整个集群的调度、状态管理和决策。控制平面由多个核心组件构成&#xff0c;包括&#xff1a; kube-apiserver&#xff1a;集…

如何对docker镜像存在的gosu安全漏洞进行修复——筑梦之路

这里以mysql的官方镜像为例进行说明&#xff0c;主要流程为&#xff1a; 1. 分析镜像存在的安全漏洞具体是什么 2. 根据分析结果有针对性地进行修复处理 3. 基于当前镜像进行修复安全漏洞并复核验证 # 镜像地址mysql:8.0.42 安全漏洞现状分析 dockerhub网站上获取该镜像的…

【Tauri2】026——Tauri+Webassembly

前言 不多废话 直言的说&#xff0c;笔者看到这篇文章大佬的文章 【04】Tauri 入门篇 - 集成 WebAssembly - 知乎https://zhuanlan.zhihu.com/p/533025312尝试集成一下WebAssembly&#xff0c;直接开始 正文 准备工作 新建一个项目 安装 vite的rsw插件和rsw pnpm instal…

OpenHarmony Camera开发指导(五):相机预览功能(ArkTS)

预览是在相机启动后实时显示场景画面&#xff0c;通常在拍照和录像前执行。 开发步骤 创建预览Surface 如果想在屏幕上显示预览画面&#xff0c;一般由XComponent组件为预览流提供Surface&#xff08;通过XComponent的getXcomponentSurfaceId方法获取surfaceid&#xff09;&…

puzzle(0531)脑力航迹

目录 脑力航迹 规则 解法 简单模式 中等模式 困难模式 专家模式 脑力航迹 规则 2条航迹会产生一个相对航迹&#xff1a; 根据相对航迹和其中一个航迹推导另外一个航迹。 解法 没有任何需要推理的地方&#xff0c;就是纯粹的2个矢量相加。 简单模式 中等模式 困难模…

在win上安装Ubuntu安装Anaconda(linx环境)

一&#xff0c;安装Ubuntu 1. 在 Microsoft 商城去下载Ubuntu(LTS:是长期维护的版本) 2.安装完之后启动程序&#xff0c;再重新打开一个黑窗口&#xff1a; wsl --list --verbose 3.关闭Ubuntu wsl --shutdown Ubuntu-22.04 WSL2 Ubuntu-20.04文件太占c盘空间&#xff0c;…

NEAT 算法解决 Lunar Lander 问题:从理论到实践

NEAT 算法解决 Lunar Lander 问题:从理论到实践 0. 前言1. 定义环境2. 配置 NEAT3. 解决 Lunar lander 问题小结系列链接0. 前言 在使用 NEAT 解决强化学习问题一节所用的方法只适用于较简单的强化学习 (reinforcement learning, RL) 环境。在更复杂的环境中使用同样的进化解…

【KWDB 创作者计划】_上位机知识篇---ESP32-S3Arduino

文章目录 前言1. ESP32-S3核心特性2. 开发环境搭建(1) 安装Arduino IDE(2) 添加ESP32-S3支持(3) 选择开发板(4) 关键配置3. 基础代码示例(1) 串口通信(USB/硬件串口)(2) Wi-Fi连接(3) 蓝牙LE广播4. 高级功能开发(1) USB OTG功能(2) AI加速(MicroTensorFlow)(3) 双核任务处理…

JavaScript学习教程,从入门到精通,DOM节点操作语法知识点及案例详解(21)

DOM节点操作语法知识点及案例详解 一、语法知识点 1. 获取节点 // 通过ID获取 const element document.getElementById(idName);// 通过类名获取&#xff08;返回HTMLCollection&#xff09; const elements document.getElementsByClassName(className);// 通过标签名获取…

PCA 降维实战:从原理到电信客户流失数据应用

一、简介 在机器学习领域&#xff0c;数据的特征维度往往较高&#xff0c;这不仅会增加计算的复杂度&#xff0c;还可能导致过拟合等问题。主成分分析&#xff08;Principal Component Analysis&#xff0c;简称 PCA&#xff09;作为一种经典的降维技术&#xff0c;能够在保留数…

信创时代编程开发语言选择指南:国产替代背景下的技术路径与实践建议

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

Arcgis10.1的汉化包及破解文件分享

Arcgis10.1的汉化包分享 网上有好多10.2的汉化包&#xff0c;但是10.1的汉化包很少&#xff0c;特在此分析出来给大家 Arcgis10.1破解文件及汉化包: (访问密码: 9784) license manager破解安装文件 另外也分享了license manager破解安装文件&#xff0c;也在相同的分享链接里…

CrewAI Community Version(一)——初步了解以及QuickStart样例

目录 1. CrewAI简介1.1 CrewAI Crews1.2 CrewAI Flows1.3 Crews和Flows的使用情景 2. CrewAI安装2.1 安装uv2.2 安装CrewAI CLI 3. 官网QuickStart样例3.1 创建CrewAI Crews项目3.2 项目结构3.3 .env3.4 智能体角色及其任务3.4.1 agents.yaml3.4.2 tasks.yaml 3.5 crew.py3.6 m…

word选中所有的表格——宏

Sub 选中所有表格()Dim aTable As TableApplication.ScreenUpdating FalseActiveDocument.DeleteAllEditableRanges wdEditorEveryoneFor Each aTable In ActiveDocument.TablesaTable.Range.Editors.Add wdEditorEveryoneNextActiveDocument.SelectAllEditableRanges wdEdito…

Tkinter与ttk模块对比:构建现代 Python GUI 的进化之路

在 Python GUI 开发中&#xff0c;标准库 tkinter 及其子模块 ttk&#xff08;Themed Tkinter&#xff09;常被同时使用。本文通过功能对比和实际案例&#xff0c;简单介绍这两个模块的核心差异。 1. 区别 Tkinter&#xff1a;Python 标准 GUI 工具包&#xff08;1994年集成&…

Linux系统之部署Dillinger个人文本编辑器

Linux系统之部署Dillinger个人文本编辑器 一、Dillinger介绍1.1 Dillinger简介1.2 Dillinger特点1.3 使用场景二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本四、部署Node.js 环境4.1 下载Node.js安装包4.2 解…

从malloc到free:动态内存管理全解析

1.为什么要有动态内存管理 我们已经掌握的内存开辟方法有&#xff1a; int main() {int val 20;//在栈空间上开辟四个字节char arr[20] { 0 };//在栈空间上开辟10个字节的连续空间return 0; }上述开辟的内存空间有两个特点&#xff1a; 1.空间开辟的时候大小已经固定 2.数组…