如何使用 String 类的常用方法进行字符串裁剪与替换

千敏酱_2534

千敏酱_2534

2026-04-03

751人浏览

原创

Java中substring()越界直接抛StringIndexOutOfBoundsException,需用Math.min()校验边界;replace()为字面替换,replaceAll()支持正则需转义;trim()仅处理ASCII空白。

如何使用 string 类的常用方法进行字符串裁剪与替换

substring() 裁剪字符串时索引越界会直接抛异常

Java 中 substring() 不像 Python 的切片那样容忍越界,beginIndex 小于 0 或大于 String.length(),或 endIndex 小于 beginIndex,都会触发 StringIndexOutOfBoundsException。

实操建议:

  • 裁剪前先用 str.length() 校验边界,尤其处理用户输入或 JSON 字段时
  • 想“安全截取前 N 位”,别硬写 str.substring(0, N),改用 str.substring(0, Math.min(N, str.length()))
  • substring(begin, end) 的 end 是**不包含**的,比如 "abc".substring(1,2) 得到的是 "b",不是 "bc"

replace() 和 replaceAll() 的行为差异远不止正则支持

replace() 只做字面量替换,参数是 char 或 CharSequence;replaceAll() 底层调用 Pattern.compile().matcher().replaceAll(),第一个参数是正则表达式。

常见错误现象:

  • 想把字符串里的点号 "." 全替换成下划线,写了 str.replaceAll(".", "_") —— 结果整个字符串变成一串下划线,因为 . 在正则里匹配任意字符
  • 用 replace() 替换空格没问题,但想替换所有空白符(包括 、 ),必须用 replaceAll("\s", "_"),且注意双反斜杠要写对
  • replaceAll() 性能明显低于 replace(),高频调用场景(如日志清洗)优先选 replace()

trim() 只去首尾 ASCII 空白,中文空格和全角空格完全无效

trim() 的判定逻辑是 c (即 Unicode 值 ≤ 32),所以它对中文空格(U+3000)、全角空格(U+FFEF)、甚至  (U+00A0)都无感。

使用场景与替代方案:

  • 处理网页表单提交的文本时,用户可能粘贴带中文空格的内容,trim() 后仍残留空白 —— 改用 str.replaceAll("^\s+|\s+$", "")(注意这里 s 覆盖 Unicode 空白)
  • 若需兼容旧版 JDK(如 JDK 7),s 不支持 Unicode 空白,得显式写 "^[\u0000-\u0020\u3000\uFEFF]+|[\u0000-\u0020\u3000\uFEFF]+$"
  • strip()(JDK 11+)才是现代替代:它基于 Character.isWhitespace(),能正确识别中文空格和各种 Unicode 分隔符

concat() 和 + 拼接在循环里性能差别极大

单独一次拼接,str.concat("suffix") 和 str + "suffix" 编译后几乎一样;但在循环中反复拼接,问题就来了。

关键影响:

  • str += "x" 在每次迭代都新建 StringBuilder → toString(),时间复杂度 O(n²)
  • concat() 每次都生成新字符串,同样不可控增长
  • 真正该用的是 StringBuilder:初始化时预估容量(如 new StringBuilder(str.length() + 100)),避免内部数组多次扩容

容易被忽略的一点:字符串裁剪和替换操作本身不修改原字符串,但频繁创建中间字符串对象,GC 压力比想象中大,尤其在内存受限环境(如 Android 后台服务)。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11277

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8402

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7232

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1204

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

968

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1456

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2969

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20231

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1315

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134万人学习