推荐优先使用slice或substring,避免使用已废弃的substr;slice和substring按起始+结束索引截取(不含结束位),substr按起始索引+字符长度截取;负数处理上slice支持倒序,substring转0,substr仅start支持负数;起始>结束时substring自动交换参数,slice和substr返回空字符串。

三个方法都能截取字符串,但参数含义、负数处理和兼容性完全不同。日常开发中推荐优先用 slice 或 substring,substr 已被明确标记为遗留方法,应避免使用。
参数逻辑不同
这是最根本的区别:
-
slice(start, end):按“起始索引 + 结束索引”截取,不包含 end 位置的字符;例如
"abcde".slice(1, 4)→"bcd" -
substring(start, end):也是“起始索引 + 结束索引”,同样不包含 end 位置的字符;例如
"abcde".substring(1, 4)→"bcd" -
substr(start, length):是“起始索引 + 要取多少个字符”;例如
"abcde".substr(1, 4)→"bcde"(从索引 1 开始取 4 个)
负数参数行为差异大
遇到负数时,三者转换方式完全不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
slice:负数表示从末尾倒数,
-1是最后一个字符,-2是倒数第二个……自动加字符串长度换算;"hello".slice(-3)→"llo" -
substring:所有负数都直接转为
0;"hello".substring(-2)→"hello"(等价于.substring(0)) -
substr:仅
start支持负数(同 slice 倒数逻辑),length为负则返回空字符串;"hello".substr(-2, 2)→"lo",但.substr(1, -1)→""
参数顺序与边界处理
当起始大于结束时:
-
slice:严格按顺序执行,
"abc".slice(2, 0)返回空字符串"" -
substring:自动交换参数,
"abc".substring(2, 0)等价于.substring(0, 2)→"ab" -
substr:不交换,
"abc".substr(2, 0)返回空字符串;substr(5, 2)超出范围也安全返回空串
标准地位与使用建议
ECMAScript 规范已明确:
- slice 和 substring 是标准推荐方法,语义清晰、行为稳定
- substr 属于历史遗留 API,未被纳入 ECMAScript 核心标准,现代浏览器虽仍支持,但规范文档中已标注为“deprecated”(不鼓励使用),未来可能移除
- 若只需从某位置截取到末尾,三者单参数调用效果一致(如
str.slice(3)、str.substring(3)、str.substr(3)都返回从第 3 位开始的剩余部分)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










