如何用Groovy优雅截取URL中最后一个点之前的部分?
优雅的Groovy方式截取URL最后一个"."之前的部分
给定原始URL字符串:
https://my.reportUrl.com/scans#~%2528cicd_scan~%2527800172eb-d004-4237-b8e6-797bde26a1ab%252A2c2025-02-04T20%2525%25252A3a16%2525%25252A3a38.511117722Z%2527%2529
需要提取最后一个.之前的部分,这里提供几种比tokenize(".")拼接更优雅的Groovy实现:
方法1:使用lastIndexOf + substring(推荐,性能最优)
直接定位最后一个.的位置,截取前半部分:
def originalUrl = "https://my.reportUrl.com/scans#~%2528cicd_scan~%2527800172eb-d004-4237-b8e6-797bde26a1ab%252A2c2025-02-04T20%2525%25252A3a16%2525%25252A3a38.511117722Z%2527%2529" def targetPart = originalUrl.substring(0, originalUrl.lastIndexOf('.'))
这种方式只需要一次遍历找到最后一个.的索引,操作简洁高效,适合大多数场景。
方法2:使用正则表达式替换
通过正则匹配最后一个.及其后面的所有内容,替换为空字符串:
def targetPart = originalUrl.replaceAll(/\.[^.]*$/, '')
正则表达式说明:
\.:匹配字面量.[^.]*:匹配任意数量的非.字符$:锚定到字符串结尾
这种写法更简洁,即使原字符串中没有.,也不会报错(直接返回原字符串)。
方法3:兼容无.的场景(增强版)
如果需要处理原URL中可能没有.的情况,避免lastIndexOf返回-1导致的异常,可以加个判断:
def targetPart = originalUrl.contains('.') ? originalUrl.substring(0, originalUrl.lastIndexOf('.')) : originalUrl
内容的提问来源于stack exchange,提问作者Chris F
相关产品推荐
相关产品推荐

