You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何用正则同时匹配#和&实现substringBefore截取效果

实现方法

你不需要写多层if分支判断,核心逻辑是找到字符串中第一次出现#或&的位置,直接截取该位置之前的内容即可。正则[#&]就可以同时匹配这两个字符,它属于正则字符组语法,会匹配两个字符中最先出现的那一个,和你原有分支判断的逻辑完全一致。

不同常用场景的实现代码如下:

  • Kotlin 标准库实现:
val splitRegex = Regex("[#&]")
// 如果两个字符都不存在,直接返回完整原字符串
val result = myString.take(splitRegex.find(myString)?.range?.first ?: myString.length)
  • Java + Apache Commons Lang3 实现(最简洁,直接用工具类自带的正则截取方法):
String result = StringUtils.substringBeforePattern(myString, "[#&]");
  • 纯Java原生实现,不需要额外依赖:
int hashPos = myString.indexOf('#');
int ampPos = myString.indexOf('&');
int splitPos = Math.min(
    hashPos == -1 ? myString.length() : hashPos,
    ampPos == -1 ? myString.length() : ampPos
);
String result = myString.substring(0, splitPos);

注意:不建议用myString.split("[#&]")[0]的写法实现,该方法会把整个字符串全量切分成数组,相比直接找匹配位置截取的方案性能更差。

以上所有写法都自动处理了两个字符都不存在的兜底场景,会直接返回原字符串,不需要额外写contains判断。

内容的提问来源于stack exchange,提问作者Evyatar Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:36:20