Java获取字符串前两个/之间含斜杠的子串有没有更优雅实现?
替代实现方案
方案1:索引截取(性能最优)
不需要拆分整个字符串,也没有正则匹配开销,仅扫描到第二个/就停止,适合处理大量或超长字符串:
// substring为左闭右开规则,结束下标取第二个/的索引+1即可完整包含前后斜杠 String result = thestra.substring(0, thestra.indexOf('/', 1) + 1);
因为你的场景已经保证字符串最少存在2个/,所以thestra.indexOf('/', 1)一定会返回合法的第二个/的索引,不会出现取值为-1的异常。
方案2:正则替换(写法最简洁)
仅需一行代码完成匹配提取,可读性高:
String result = thestra.replaceAll("(/[^/]+/).*", "$1");
正则逻辑说明:
(/[^/]+/)捕获第一个/到第二个/之间的完整片段(包含前后两个/).*匹配后面所有剩余内容- 用
$1把整个字符串替换为捕获到的目标片段即可
原split方案的不足
原实现需要拆分整个字符串生成数组,会产生不必要的内存开销,长字符串场景下性能弱于上述两种方案。
内容的提问来源于stack exchange,提问作者Ajay Kumar
相关产品推荐
相关产品推荐

