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

如何从URL中提取所有以#包裹的Token?

解决方案:提取URL中#包裹的Token

问题原因分析

你之前用的两种方法存在局限性:

  • StringUtils.substringBetween(url, "#")仅能提取第一个被#包裹的内容(还不带前后#),无法获取所有匹配项。
  • StringTokenizer按#分割后,需要手动筛选Token内容,逻辑繁琐且容易因URL格式变化出错。

最优实现:正则表达式匹配

使用正则表达式可以精准匹配所有#xxx#格式的Token,代码示例如下:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TokenExtractor {
    public static void main(String[] args) {
        String url = "https://example.com/#EMAIL#/F77A1B8BDF89B7E4E90206DAC26AA737?firstname=#FIRSTNAME#&lastname=#LASTNAME#";
        
        // 正则规则:匹配所有以#开头、#结尾,中间不含#的内容
        Pattern tokenPattern = Pattern.compile("#[^#]+#");
        Matcher matcher = tokenPattern.matcher(url);
        
        List<String> tokenList = new ArrayList<>();
        // 遍历所有匹配结果
        while (matcher.find()) {
            tokenList.add(matcher.group());
        }
        
        // 转成逗号分隔的字符串输出
        String result = String.join(", ", tokenList);
        System.out.println(result); // 输出:#EMAIL#, #FIRSTNAME#, #LASTNAME#
    }
}

代码说明

  • 正则#[^#]+#:[^#]+表示匹配任意非#的字符(至少一个),确保只会匹配完整的#xxx#格式Token。
  • matcher.find()会循环查找所有符合规则的匹配项,matcher.group()返回当前匹配的完整Token(包含前后#)。
  • 最终可以将Token列表转为你需要的格式(列表或逗号分隔字符串)。

内容的提问来源于stack exchange,提问作者Jhonatan jOna Arcila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:22:16