当前位置: 首页 > news >正文

除了`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.xdnf.cn/news/54631.html

相关文章:

  • 使用DeepSeek的AIGC的内容创作者,如何看待陈望道先生所著的《修辞学发凡》?
  • 从外网访问局域网服务器的方法+Linux文件和命令
  • ONLYOFFICE深度解锁系列.3-OnlyOffice集成第三方软件原理揭秘:如何提高文件打开速度
  • 基于一致性哈希算法原理和分布式系统容错机制
  • C++编程 希尔排序
  • 状态管理最佳实践:Provider使用技巧与源码分析
  • 【C语言函数部分的重要知识点】--自定义函数,static和extern
  • 【题解-JSOI】JSOI2009 配菜
  • 【连接池-55.1】深入解析Druid连接池:高性能Java数据库连接池的最佳实践
  • Python 爬虫案例
  • Dubbo QoS操作手册
  • Spring 01
  • 前端与传统接口的桥梁:JSONP解决方案
  • 大数定理(LLN)习题集 · 答案与解析篇
  • QCPAxis、QCPGrid 和 QCPAxisTicker 三者关系
  • 关于隔离2:ADC芯片
  • 京东 h5st 5.1 详情 京东滑块 cfe 分析
  • Cursor工具你会用了吗
  • leetcode0078. 子集-medium
  • stm32 13位时间戳转换为时间格式、对时
  • Day58 | 179. 最大数、316. 去除重复字母、334. 递增的三元子序列
  • Linux系统的远程终端登录、远程图形桌面访问、 X图形窗口访问
  • 无回显RCE
  • 每日一道leetcode(补充版)
  • 具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解
  • acwing--动态规划【线性dp】4/20、4/21
  • 网页的URL绝对路径和相对路径,以及各自的使用场景
  • 【Vulkan 入门系列】创建逻辑设备和图形、呈现队列,显示尺寸更改(三)
  • 错误: 找不到或无法加载主类 HelloWorld,cmd窗口,java命令,提示
  • PT站中的tracker